我目前正在建立一个项目/学习laravel。
我有两个数据库,两个表中有一个colomn,具有相同的唯一值。
在我的刀片页面中,我有一个foreach循环遍历第一个表,但我无法弄清楚如何让它正确地带来第二个表数据等。
这是代码。
我的resturants模型。
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
控制器传递的数据很好,因此排除了。
我正在尝试将相关评论与餐馆对象等一起传递。
任何想法?
如果你看到任何拼写错误的借口,因为我必须在笔记本电脑上重新打字并且桌面代码很好:)
更新
非常感谢你的帮助,在你理解之后我明白了,谢谢:)
当我尝试它时,我试图获得非对象的属性。
这是更新后的代码
餐厅模特
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)}}
这让我试图获得非对象的属性。
$餐厅的完美运作与评论无关?我可以看看它并看到数组中的5个对象
答案 0 :(得分:0)
如果你有一个$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');
}
以这种方式访问相关属性类似于documentation中给出的第一个示例。如果您想查看源代码并查看最新情况,here是每当您访问未在类中特定定义的模型属性时调用的函数(即不是$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');
有关详细信息,请参阅documentation。如果您遵循雄辩的约定(多个表名,id作为主键,外键名称是正确的),那么您可以使用快捷方式,只需指定模型类名称:
return $this->belongsToMany('ModelClassName');
这是遵循惯例的一个很好的理由。