2014-11-21 2 views
0

Я пытаюсь восстановить данные о продукте из дерева категорий слева направо.Laravel: Как подтолкнуть модель к переменной?

Это мой код до сих пор:

$branches = Category::whereBetween('left', array($category->left, $category->right)) 
    ->get(); 

foreach ($branches as $branch) { 
    $products = $branch->product; 
} 

Как я могу сделать + = или нажать операцию на $ продукты для того, чтобы получить все продукты каждой отрасли?

Большое спасибо

Edit:

Это мои классы моделей:

class Category extends Eloquent { 
    protected $fillable = array('left', 'right', 'user'); 

    public function producto(){ 
     return $this->hasMany('Product'); 

    } 
} 


class Product extends Eloquent { 
    protected $fillable = array('nombre', 'category', 'proveedor', 'costo', 'precio', 'tiempo_de_elaboracion', 'usuario', 'peso', 'precio_minimo', 'destacado'); 

    public function category(){ 
     return $this->belongsTo('Category'); 
    } 

    public function image(){ 
     return $this->hasMany('Image'); 
    } 
} 
+0

Является ли '$ продуктами' коллекция или массив? Также не было бы лучше выбрать продукты сразу же из db? Я уверен, что это должно быть возможно как-то – lukasgeiter

+0

Я не уверен, я все еще учусь. У меня есть объект под названием Product, я надеюсь, что это поможет. –

+0

Можете ли вы обновить свой вопрос своей моделью продукта и классом категории? – lukasgeiter

ответ

0

В конце концов, я посмотрел на ветвях первого и поместить их в список:

$array = $branches->lists('id'); 

И потом, я посмотрел на продукты в этой ветви:

$products = Product::whereIn('category_id', $array)->paginate(24); 

Извините за немой вопрос, я применяю неправильный фокус

0

толкать элементы в массив:

$products = array(); 
foreach ($branches as $branch) { 
    $products[] = $branch->product; 
} 
0

Какие отношения между филиала и продукт? HasMany я думаю? Как вы определили эту взаимосвязь в модели Branch? Если сохранить логический синтаксис в определении его, следует назвать $branch->products в вашем коде ...

Если все хорошо, и данные извлекаются, используйте

$products = []; 
foreach ($branches as $branch) { 
    $products += $branch->products; 
} 
1

Вы действительно можете сделать это в гораздо лучше. Вместо того, чтобы сначала получать категории, а затем загружать продукты для каждой категории, вы можете запросить все продукты, находящиеся в категории.

Мы будем использовать whereHas, что позволяет установить условия для отношений. Laravel docs

$products = Product::whereHas('category', function($q) use ($category){ 
    $q->whereBetween('left', array($category->left, $category->right)); 
})->get(); 
Смежные вопросы