繁体   English   中英

用两个表中的数据进行Foreach Laravel

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM