Select 来自 select 使用 Laravel eloquent
Select from select using Laravel eloquent
我想获得所有用户最喜欢的产品。查询应该是这样的:
SELECT *
FROM products
WHERE id IN (SELECT id FROM favourites WHERE user_id == Auth::id())
如何使用 eloquent 进行查询?
您正试图实现这样的目标:
在官方文档中可以找到Advanced where clauses
的解释
DB::table('products')
->whereIn('id', function($query)
{
$query->select('id')
->from('favourites')
->where('favourites.user_id', Auth::id());
})
->get()
最终结果将是(您可以看到使用 toSql() 方法而不是 get() 转储查询):
select * from `products` where `id` in (select `id` from `favourites` where `favourites`.`user_id` = ?)
你说“我该怎么做”是什么意思?您是在问如何构造它或如何使用 eloquent 查询?
如果您提出查询:
Product::whereIn('id', Favourite::select('id')->whereUserId(Auth::id())->get()->toArray())->get();
应该可以。
如果你问结构,你应该在模型中定义关系。
在用户模型上;
public function favourites()
{
return $this->hasMany(Favourite::class, 'user_id');
}
以及最喜欢的模特;
public function favoriteProduct()
{
return $this->belongsTo(Product::class, '[the product_id column on favourites table]');
}
然后就可以点赞了;
$userFavourites = User::with('favourites.favoriteProduct')->whereId(Auth::id())->favourites;
您认为:
@foreach($userFavourites as $userFavourite)
{{ $userFavourite->favouriteProduct }}
@endforeach
这是最简单的。另一方面;你可以使用 Has Many Through 关系。
这将是最干净的方式。
我想获得所有用户最喜欢的产品。查询应该是这样的:
SELECT *
FROM products
WHERE id IN (SELECT id FROM favourites WHERE user_id == Auth::id())
如何使用 eloquent 进行查询?
您正试图实现这样的目标:
在官方文档中可以找到Advanced where clauses
的解释DB::table('products')
->whereIn('id', function($query)
{
$query->select('id')
->from('favourites')
->where('favourites.user_id', Auth::id());
})
->get()
最终结果将是(您可以看到使用 toSql() 方法而不是 get() 转储查询):
select * from `products` where `id` in (select `id` from `favourites` where `favourites`.`user_id` = ?)
你说“我该怎么做”是什么意思?您是在问如何构造它或如何使用 eloquent 查询?
如果您提出查询:
Product::whereIn('id', Favourite::select('id')->whereUserId(Auth::id())->get()->toArray())->get();
应该可以。
如果你问结构,你应该在模型中定义关系。
在用户模型上;
public function favourites()
{
return $this->hasMany(Favourite::class, 'user_id');
}
以及最喜欢的模特;
public function favoriteProduct()
{
return $this->belongsTo(Product::class, '[the product_id column on favourites table]');
}
然后就可以点赞了;
$userFavourites = User::with('favourites.favoriteProduct')->whereId(Auth::id())->favourites;
您认为:
@foreach($userFavourites as $userFavourite)
{{ $userFavourite->favouriteProduct }}
@endforeach
这是最简单的。另一方面;你可以使用 Has Many Through 关系。
这将是最干净的方式。