Php Foreach,数据来自两个表laravel
我目前正在创建一个项目/学习laravel 我有两个数据库,两个表中都有一个列,具有相同的唯一值 在我的blade页面中,我有一个foreach,它循环遍历第一个表,但我无法弄清楚如何让它正确地携带第二个表数据,等等 这是代码 我的餐厅模式Php Foreach,数据来自两个表laravel,php,laravel-4,Php,Laravel 4,我目前正在创建一个项目/学习laravel 我有两个数据库,两个表中都有一个列,具有相同的唯一值 在我的blade页面中,我有一个foreach,它循环遍历第一个表,但我无法弄清楚如何让它正确地携带第二个表数据,等等 这是代码 我的餐厅模式 class Restaurant extends Eloquent implements UserInterface, RemindableInterface { use UserTrait, RemindableTrait; protected $ta
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(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完美运作,只是没有评论?我可以添加它并查看数组中的5个对象如果你有一个$restaurant的实例,你可以得到一组它的评论,如下所示:
$reviews = $restaurant->reviews;
$chefs = $restaurant->chefs;
return $this->hasMany('restaurant_id');
由于这是一个多对多关系,它返回一个集合,现在您也可以在该集合上使用@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或$CURDED,而是任何数据属性、访问的关系(如属性)等
如果您有一个厨师模型和一个数据库结构,其中一家餐厅可能有许多厨师,并且您在餐厅模型中定义了此方法:
public function chefs()
{
return $this->hasMany('Chef');
}
然后你可以得到一份餐馆所有厨师的名单,如下所示:
$reviews = $restaurant->reviews;
$chefs = $restaurant->chefs;
return $this->hasMany('restaurant_id');
您还可以直接调用该方法,例如,如果您希望向查询添加更多限制:
$chefsNamedBob = $restaurant->chefs()->where('name', '=', 'Bob')->get();
请注意,当以这种方式调用时,还必须首先调用->get或->这与尝试通过实例的属性而不是作为实例上的方法访问关系时有所不同。这是因为当您调用该方法时,查询尚未执行,get就是这样做的。当您作为属性访问关系时,当您收到结果时,查询已经执行,这意味着SQL没有更多的时间为您执行过滤
更新
我还注意到你的关系中有一个错误。您将餐厅定义为这样的关系:
$reviews = $restaurant->reviews;
$chefs = $restaurant->chefs;
return $this->hasMany('restaurant_id');
hasMany函数的第一个参数不是列名。通常,关系函数的函数签名如下:
return $this->hasOne('ModelClassName', 'foreign_key', 'local_key');
有关更多信息,请参阅。如果您遵循的是雄辩的约定复数表名,id作为主键,外键名是正确的,那么您可以使用快捷方式,只需指定模型类名:
return $this->belongsToMany('ModelClassName');
这是遵守惯例的一个很好的理由。非常感谢您的帮助,在您解释之后,我理解了。非常感谢:有什么想法吗?