来自两个表格laravel的数据

时间:2015-01-15 20:58:38

标签: php laravel-4

我目前正在建立一个项目/学习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个对象

1 个答案:

答案 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');

这是遵循惯例的一个很好的理由。