Hasmany с ребенком ребенка в laravel 5.5 - PullRequest
0 голосов
/ 24 июня 2018

У меня 3 таблицы.

  1. магазины
  2. shop_foods
  3. продукты

Мне нужно получить данные таблицы продуктов, когда я создаю многозначную связь с shops_food и store.

$this->hasMany('App\Diet\ShopFood', 'shop_id', 'id');

Ответы [ 3 ]

0 голосов
/ 24 июня 2018

Если я правильно понимаю, вы хотите получить foods при звонке shops->shop_foods.если это то, что

//first you call your shops as you want.
Shop::with(['shops_food' => function($query){
    //the 'shops_food' relationship should be called within an array
    //this way you could query the relationship as the eloquent model.
    //that way you could call the 'foods' relationship inside the shops_food relationship.
    $query->with('foods')
}])
...

Обратите внимание, что вы должны иметь объявленные отношения в моделях shop и food_foods

, чтобы ваши модели были такими же, как эти

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Shop extends Model
{
    //
    public function shops_food()
    {
        //shop_id is the foreing key inside your shop_foods table
        return $this->hasMany('App\ShopFood','shop_id');
    }
    ....
 }

, тогда ShopFood Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ShopFood extends Model
{
    //
    public function foods()
    {
        //shop_food_id is the foreing key inside your foods table
        return $this->hasMany('App\Food','shop_food_id');
    }
    ....
 }
0 голосов
/ 25 июня 2018

Это звучит так, как будто вы хотите

public function foods() {
    $this->hasMany('App\Diet\Food');
}

в вашей модели ShopFood и в вашей модели Shop

public function shopfoods() {
    $this->hasMany('App\Diet\ShopFood')->with('foods');
}

Вы также можете сделать 2 отдельных отношения в модели магазина:

public function shopfoods() {
    $this->hasMany('App\Diet\ShopFood');
}
public function shopfoodsWithFoods() {
    $this->hasMany('App\Diet\ShopFood')->with('foods');
}

Таким образом, вы можете использовать все, что вам нужно в данный момент.

Но все это на самом деле не ясно ... Я даже не уверен, как связаны 3 таблицы, поэтому hasMany - это всего лишь догадки. Тем не менее, вы можете просто воспользоваться функцией «с».

PS Также есть возможность просто объявить

protected $with = ['foods'];

в вашей модели ShopFood, если вы ВСЕГДА хотите, чтобы эти 2 были подключены. Это все в документации.

0 голосов
/ 24 июня 2018

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

Почему вы назначаете hasMany в отношении многие ко многим?

В своей модели магазина вы можете установить отношения с продуктами:

$this->belongsToMany('App\Diet\Food);

Затем вы можете получить еду при вызове

$shop->foods

И shop_foods со свойством Pivot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...