CollegeMajor::with('majors')->get()
を呼び出す場合、次の生SQLクエリを適用したいと考えます。 TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)
をparent_id
の列に適用します。 parent_idの値は1:1234, 1:3121, 1:1332
などとして保存されています。したがって、コロンの後ろのすべてを削除したいと思います。 CollegeMajorの主キーはidで、その値は1
のような整数です。 Laravelは生のクエリが列の名前だと考えているので、私は以下のエラーを受け取ります。関係を実行するときに、LaravelにそのSQLクエリをproject_id
列に適用するように指示するにはどうすればよいですか?それは返すようにする方法Laravel 5.2自己参照型のモデル関係を定義する際の生のクエリの使用?
CollegeMajor.php
class CollegeMajor extends Model {
public function majors() {
return $this->hasMany('App\Models\CollegeMajor', \DB::raw(TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)))
->where('entity', 'major');
}
}
エラー
Unknown column 'college_major.TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)' in 'where clause' (SQL: select * from `college_major` where `entity` = major and `college_major`.`TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)` in (1, 2, 3, 4, 5, 6, 7, 8))
college_majorsテーブル
id name entity parent_id
1 College of Art college 1234
2 College of Business college 4567
3 Art History major 1:1234
4 Asian Art major 1:1234
5 Accounting major 2:4567
6 Marketing major 2:4567
?
非常に近いと思います。私は私の質問を編集しました。コレクションは私が達成しようとしているものです。助言がありますか? –
私は質問の最後に 'get()'を追加するのを忘れたので、答えを更新しました。それから、コレクションを返します。 – Gayan
私はテーブルからすべての結果を取得し、大学でのみ結果をフィルタリングし、各大学のオブジェクトに「メジャー」キーを追加し、各レコードをループし、メジャー私は各大学のオブジェクトをループし、それが所属する大学にメジャーをプッシュします。はるかにエレガントなソリューションが、私はそれが今のところできると思う。 –