2015-01-17 5 views
0

Я создаю проект колледжа, и я не могу передать данные из второй таблицы с основной таблицей/классом.Не удается передать данные второй таблицы для foreach в laravel

Когда я пытаюсь передать его и получить к нему доступ в представлении, я попытаюсь получить доступ к ошибке объекта.

это мой код ниже.

центр класса

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 в качестве колонки

я думал этот класс обзора в модели тренажерного зала должен иметь Бро данные обзора таблицы с $ Гимнастический зал?

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

любые идеи, что мне не хватает? спасибо, я новичок в laravel и php

+0

$ data = array_add ($ data, 'gyms', $ gyms, 'reviews', $ review); - лучше использовать $ data = $ data + ['gyms' => $ gyms, 'reviews' => $ reviews]; – maxpovver

+0

круто спасибо, как им новичок, вы могли бы мне сказать, почему :) – user1529597

+0

более четкий код работает лучше. о вашем вопросе - может быть, вы можете добавить немного более подробную информацию? .. – maxpovver

ответ

1

Вы сказали, что это hasMany-отношения, так что не должно быть "{{$ gym-> reviews}}" вместо этого? Не пробовал, но кажется довольно странным. Также это должно возвращать массив, а не один объект, поэтому вам придется перебирать его.

EDIT:

Весь этот раздел:

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 ($ gymsearch). Также вы должны заглянуть в нетерпеливую загрузку для этого случая. Существует функция -> with ($ relation), которая может загружать все ваши отзывы. Таким образом, вы можете оптимизировать количество запросов, отправляемых в базу данных.

+0

Спасибо за это, просто чтобы быть ясным, поскольку я не могу заставить его работать, я получаю это Попытка получить свойство не-объекта, поэтому его в массиве отношение sepecfied в модели должно позволить этому объекту быть доступ через ниже? @foreach (array_slice ($ спортзалов, 0, 5) в $ тренажерный зал) {{$ gym-> Отзывы}} @endforeach , если я не могу получить, чтобы работать прямо как выше $ data = $ data + ['gyms' => $ gyms, 'reviews' => $ reviews]; позволяет мне получить доступ к обзорам $, где я не мог раньше, но если я сделаю foreach, а затем внутри foreach внутри цикла через обзоры $, я получаю все 5 $ отзывов для каждого из внешних looop? – user1529597

+0

Это должно быть что-то вроде: \ @foreach (array_slice ($ gyms, 0, 5) как $ gym) \ @foreach ($ gym-> review как $ review) {{$ review-> reviewText}} \ @endforeach \ @endforeach. Где reviewText является атрибутом вашего объекта Review. Поскольку я не очень хорошо разбираюсь в механизме шаблонов laravel, я не могу точно сказать, как вложить в нее \ @foreach заявления, но это кажется подходящим способом. (Мне пришлось скрыться от [at] -sign, так как SO не позволял мне комментировать иначе) – ricktap

+0

Cheers Rick, не пробовал это сейчас – user1529597

Смежные вопросы