我正在使用 Laravel 并且在使用 Eloquent ORM 时遇到了一个小问题。我可以使用 JOIN 简单地使用 SQL 查询来实现它,但我似乎无法让它与 Eloquent 一起使用!
这就是我想要的,我有两个表。一个是“Restaurants”,另一个是“Restaurant_Facilities”。
这些表很简单......和一对一的关系。就像有一个restaurant
带有id
, name
, , 等的slug
表格和另一个restaurant_facilities
带有id
, restaurant_id
, wifi
,parking
等的表格
现在我想要做的是..加载所有有 wifi = 1 或 wifi = 0 的餐厅.. 我怎么能用 Eloquent 做到这一点?我尝试过急切加载、数据透视表、with()、collections(),但似乎没有任何效果!
对于多对多关系,我遇到了同样的问题cuisines
!我有同restaurant
一张桌子和一张cuisine
桌子和一张restaurant_cuisine_connection
桌子..
但是如何使用它的 ID 加载特定美食中的所有餐厅?
这行得通。
Cuisine::find(6)->restaurants()->get();
但我想从 Restaurant:: 模型而不是美食中加载它.. 因为我有很多条件链接在一起.. 它用于搜索和过滤/浏览页面。
有什么想法或方法吗?我已经为此苦苦挣扎了 3 天,但仍然没有答案。
示例模型:
class Restaurant extends Eloquent {
protected $table = 'restaurants';
public function facilities() {
return $this->hasOne('Facilities');
}
}
class Facilities extends Eloquent {
protected $table = 'restaurants_facilities';
public function restaurant() {
return $this->belongsTo('Restaurant');
}
}
PS:这似乎有效..但这不是雄辩的方式吗?
Restaurant::leftJoin(
'cuisine_restaurant',
'cuisine_restaurant.restaurant_id',
'=', 'restaurants.id'
)
->where('cuisine_id', 16)
->get();
另外,在没有其他查询的情况下查找具有特定列值的餐厅数量的最佳方法是什么?像.. 我必须找到有停车场 = 1 和 wifi = 1 的餐厅总数?
请帮助解决这个问题。
谢谢你。