[英]Foreach with data from two tables laravel
我目前正在建立一个项目/学习laravel。
我在两个表中都有两个具有一个列的数据库,并且具有相同的唯一值。
在我的刀片页面中,我有一个foreach循环遍历第一个表,但是我无法弄清楚如何正确地将第二个表数据带入其中,等等。
这是代码。
我的餐厅模型。
class Restaurant extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
protected $table = 'restaurants';
public function reviews()
{
return $this->hasMany('restaurant_id');
}
评论模型
class Review extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'reviews';
public $review;
public function reviews()
{
return $this->hasMany('restaurant_id');
}
刀片foreach循环
@foreach(array_slice($restaurants, 0, 5) as $restaurants)
{{$restaurant[0]->restaurant_id}}}
{{$reviews= Review::find(1)->where('restaurant_id', '=', $restaurant[0]->restaurant_id)->get()}}
@emdforeach
控制器可以很好地传递数据,因此可以将其排除。
我正在尝试将相关评论与餐厅对象等一起传递。
有任何想法吗?
如果您看到任何错别字借口,因为我不得不在笔记本电脑上重新输入,并且台式机代码很好:)
UPDATE
非常感谢您的帮助,在您解释之后,我理解了,谢谢:)
不管怎样,当我尝试它时,我会尝试获取非对象的属性。
这是更新的代码
餐厅模型
class Restaurant extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'restaurants';
public $restaurant;
public function reviews()
{
return $this->hasOne('Review', 'restaurant_id', );
}
在我看来
v {{dd($ restaurants-> reviews}}
这给了我尝试获取非对象的属性。
$ restaurants完美地工作,只是没有评论? 我可以dd并查看数组中的5个对象
如果您有$restaurant
的实例,则可以收集如下的评论集合:
$reviews = $restaurant->reviews;
由于这是多对多关系,因此它返回一个集合,您现在也可以在该集合上@foreach
:
@foreach(array_slice($restaurants, 0, 5) as $restaurants)
{{ $restaurant[0]->restaurant_id }}
@foreach($restaurant->reviews as $review)
{{ $review->rating }}
@endforeach
@endforeach
餐馆模型上存在reviews
属性,因为您定义了以下方法:
public function reviews()
{
return $this->hasMany('restaurant_id');
}
以这种方式访问相关属性类似于文档中给出的第一个示例。 如果你想看看源,看看怎么回事, 这里是每当你访问未在类明确定义(即不是模特属性,它被调用的函数$fillable
或$guarded
,但任何数据属性,像属性一样访问的关系等)。
相反,如果您有一个Chef
模型和一个数据库结构,其中一个餐厅可能有很多厨师,而您在餐厅模型中定义了此方法:
public function chefs()
{
return $this->hasMany('Chef');
}
然后,您可以在这样的餐厅获得所有厨师的清单:
$chefs = $restaurant->chefs;
您还可以直接调用该方法,例如,如果您想对查询添加更多限制:
$chefsNamedBob = $restaurant->chefs()->where('name', '=', 'Bob')->get();
请注意,以这种方式调用时,还必须调用->get()
或->first()
,这在尝试通过实例的属性而不是实例的方法访问关系时是不同的。 这是因为调用该方法时,查询尚未执行(这就是get()
作用)。 当您将关系作为属性访问时,到收到结果时,查询已经执行完毕(这意味着SQL不再有时间为您进行过滤)。
更新
我还注意到您的关系有误。 您可以定义餐厅来审查以下关系:
return $this->hasMany('restaurant_id');
hasMany
函数的第一个参数不是列名。 通常,关系函数的函数签名是这样的:
return $this->hasOne('ModelClassName', 'foreign_key', 'local_key');
请参阅文档以获取更多信息。 如果遵循雄辩的约定(复数表名称,id作为主键,外键名称正确),则可以使用快捷方式,只需指定模型类名称:
return $this->belongsToMany('ModelClassName');
这是遵循惯例的重要原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.