2017-01-30 19 views
0

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 

答えて

0

hasMany()の2番目のパラメータが外部キーです。だから、そこにあなたの質問を定義することはできません。次のように関係を定義します。

public function majors() { 
    return $this->hasMany('App\Models\CollegeMajor'); 
} 

次に、raw expressionsを使用してクエリします。

CollegeMajor::with('majors') 
    ->select(DB::raw('TRIM(TRAILING SUBSTRING_INDEX(parent_id, ":", -1) FROM parent_id))') 
->where('entity', 'major')->get(); 

まだテストされていません。私の電話で:

+0

非常に近いと思います。私は私の質問を編集しました。コレクションは私が達成しようとしているものです。助言がありますか? –

+0

私は質問の最後に 'get()'を追加するのを忘れたので、答えを更新しました。それから、コレクションを返します。 – Gayan

+0

私はテーブルからすべての結果を取得し、大学でのみ結果をフィルタリングし、各大学のオブジェクトに「メジャー」キーを追加し、各レコードをループし、メジャー私は各大学のオブジェクトをループし、それが所属する大学にメジャーをプッシュします。はるかにエレガントなソリューションが、私はそれが今のところできると思う。 –

関連する問題