总结一下 复杂查询的方法:
普通的join查询
DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.id', 'contacts.phone', 'orders.price')
->get();
Left Join 声明语句
DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
//select * from users where name = 'John' or (votes > 100 and title <> 'Admin')
//这里注意一下 想要对where条件里面的东西继续划分,可以利用$query 执行查询器
DB::table('users')
->where('name', '=', 'John')
->orWhere(function($query)
{
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
问题一,如果想要对join里查出的东西 再进行条件划分,怎么做呢。看个例子
主要是 $join->on('这里放置联合查询条件')->where(操作的条件)
DB::table('goods')
->select('goods.*')
->distinct('goods.id')
->join('goods_auction',function ($join) use (&$user){
$join->on('goods.id','=','goods_auction.goods_id')
->where('goods_auction.buyer_id','=',$user['id']);
});
这里&$user 是上文传过来的数据,可以进行操作