2016-09-03 15 views
4

私は2つのテーブル:usersstudentsを持っています。これらのテーブルはフィールドで接続されている:Laravelの2番目のテーブルからreltedデータを取得する方法は?

users.id = studetns.user_id 

私は要求を使用して情報を取得しよう:

$students = User::where(function ($query) use ($request) { 

      // Filter by name 
      if (($term = $request->get("name"))) { 
       $query->where('name', 'like', '%' . $term . '%'); 
       $query->where('secondname', 'like', '%' . $term . '%'); 
      } 

     })->with("details")->where('type', '2')->orderBy('name', 'desc')->get(); 
     dd($students); 

あなたは必見のテーブルを接続するという、with("details")を見ることができます。

私のモデルUserは次のとおりです。

public function details() 
    { 
     return $this->hasOne('App\Student', 'user_id', 'id'); 
    } 

私は、クエリを実行すると、私はエラーを取得する:

select * from `users` where `type` = 2 order by `name` desc) 

それはname fielsがある場合にそれが第二のテーブルに接続されていなかったことを意味します。

+0

どのようなエラーが表示されますか? –

+0

リクエストはフィールド名がないところで 'users'という1つのテーブルのみで動作するため、 'order clause'の' nknown column 'name'にエラーが発生します – Babaev

+0

このカラムはどこにありますか?学生テーブルで? –

答えて

1

namesecondnamestudentsテーブルにある場合は、この試してみてください。これは($request->name変数が存在するかどうか、それの値によってフィルタリングすべてstudents)すべてstudentsをロードし、順番ます

$students = User::where('type', '2') 
    ->with(['details' => function ($query) use ($request) { 

     if (!empty($request->name)) { 
      $query->where('name', 'like', '%'.$request->name.'%'); 
      $query->orWhere('secondname', 'like', '%'.$request->name.'%'); 
     } 

     $query->orderBy('name', 'desc'); 
    }])->get(); 

を。

PS:jedrzej.kurylo @としては、それはあなたがsecondnamenameまたはで名前を検索する場合orWhere演算子を使用することは理にかなって、と述べました。 ユーザーテーブルに列が存在しないため、単純にできないように

+0

'students'に' type'がなく、 'students'に' name'がありません – Babaev

+0

これは、ユーザテーブルに "名前"列がないので、エラーを引き起こします。 –

+0

1つの発言のみ、この要求は両方のテーブルからではなく、Studentテーブルからフィールドを取ります。 – Babaev

1

あなたはどこ(に渡されたコールバックで名前でフィルタリングすることにより、ユーザーモデルをロードする方法)は、エラーが発生します作業。

あなたは、関連学生表に名前を与えられたユーザーをロードしたい場合は、whereHasを(使用する必要があります)

$students = User::whereHas('details', function ($query) use ($request) {   // Filter by name 
     if (($term = $request->get("name"))) { 
      $query->where('name', 'like', '%' . $term . '%'); 
      $query->where('secondname', 'like', '%' . $term . '%'); 
     } 
    }) 
    ->join('details', 'details.user_id', '=', 'users.id') 
    ->with("details") 
    ->where('type', '2') 
    ->orderBy('name', 'desc') 
    ->get(); 

私はまた、あなたがその名前のユーザーを取得したいかもしれないと思いますOR$用語一致するsecondnameので、私はあなたが交換するお勧め:

$query->where('name', 'like', '%' . $term . '%'); 
    $query->where('secondname', 'like', '%' . $term . '%'); 

$query->where('name', 'like', '%' . $term . '%'); 
    $query->orWhere('secondname', 'like', '%' . $term . '%'); 
関連する問題