无法通过第二个表数据传递到laravel中的foreach

时间:2015-01-17 13:56:12

标签: php laravel-4

我正在建立一个大学项目,我不能通过主表/类的第二个表传递数据。

当我尝试传递它并在视图中访问它时,我试图访问非对象错误。

这是我的代码。

健身课

class Gym extends Eloquent implements UserInterface, RemindableInterface {

use UserTrait, RemindableTrait;
 */
protected $table = 'gyms';

public $gym;

public function reviews() 
{
return $this->hasMany('Review', 'unique_gym_id'); // represents the Review class
}

页面控制器相关部分,我将此循环中的数据传递给视图。

foreach($gymsearchs as $gymsearch)
{

    Gym::save($gymsearch);
    $gyms[] = DB::table('gyms')->where('unique_gym_id', '=', $gymsearch->unique_gym_id)->get();
    Review::review($gymsearch);
    $reviews[] = DB::table('reviews')->where('unique_gym_id', '=', $gymsearch->unique_gym_id)->get();


}

//dd($reviews); this shows the full review object contents fine
    $data = array_add($data, 'gyms', $gyms, 'reviews', $reviews);

视图

@foreach(array_slice($gyms, 0, 5) as $gym)
    {{$gym->name}} // works fine and with other objects from the $gym
@endforeach



@foreach(array_slice($gyms, 0, 5) as $gym)
     {{$gym->review}} // this gives me a trying to access non object error.
@endforeach

健身房模型和评论模型都将unique_gym_id作为列

我认为健身房模型中的这个评论课应该通过$ gym的评论表数据?

public function reviews() 
{
return $this->hasMany('Review', 'place_id');
}

我缺少什么想法?谢谢我是laravel和php的新手

1 个答案:

答案 0 :(得分:1)

你告诉它是一个hasMany关系,所以不应该是" {{$ gym-> reviews}}"代替? Haven没试过,但看起来很奇怪。此外,这应该返回一个数组,而不是一个对象,所以你必须迭代它。

编辑:

整个部分:

foreach($gymsearchs as $gymsearch)
{
   Gym::save($gymsearch);
   $gyms[] = DB::table('gyms')->where('unique_gym_id', '=', $gymsearch->unique_gym_id)->get();
   Review::review($gymsearch);
   $reviews[] = DB::table('reviews')->where('unique_gym_id', '=', $gymsearch->unique_gym_id)->get();
}

//dd($reviews); this shows the full review object contents fine
$data = array_add($data, 'gyms', $gyms, 'reviews', $reviews);

可能是

Gym::save($gymsearchs);
$gyms = Gym::where('unique_gym_id', 'in', array_map(create_function('$o', 'return $o->unique_gym_id;'), $gymsearchs))->get();
$data['gyms'] = $gyms;

,因为您似乎没有使用$ review。但是我并不完全掌握健身房搜索的意图,以及你试图用Review :: review($ gymsearch)方法做些什么。此外,你应该考虑这种情况的急切加载。有一个 - > with($ relation)函数,可以加载所有评论。这样您就可以优化发送到数据库的查询数量。