@kirill-93

Как приджоинить модель в laravel?

Такая структура моделей:
-Category
-Param
-ParamsToCategory
-ParamsValue

В модели Category указываю:
public function params()
    {
        return $this->hasManyThrough('Param', 'ParamsToCategory', 'category_id', 'id');
    }

В модели Param:
public function values()
    {
        return $this->hasMany('ParamsValue');
    }


Вопрос: Как мне одним выражением получить такой результат:
Category1: [
    id
    name
    params : [
        id
        name
        values : [
            id,
            name,
            ...
        ]
    ]
]


То есть если просто категорию с параметрами, то я пишу
Category::with('params')->find($id);
А сейчас мне надо что-то типа такого:
Category::with('params')->with('values')->find($id)->toArray();

Но это не работает.
Как мне достать параметры категории и их значения с помощью моделей, без sql?
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
@H_Kamol
full stack developer
Попробуйте типа так:

Category::with(array('params','params.values'))->find($id)->toArray();


Если внешние ключи правильно установлены, то подтягивает все values и params данной категории
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DJZT
@DJZT
Laravel - code for you
Category::with('params')->find($id); Конструкция нужна только тогда, если ты не хочешь делать запрос во время обращения к параметру модели params. Тогда там сразу будет лежать результат. В общем стуи особо не меняет.
$Cat = Category::with('params')->find($id);
foreach(Cat->params as $param){
 foreach($param->values as $value){
echo $value->{свойство};
}
}


Я так понял, тебе вот это надо понять? Советую чуть чуть подтянуть знания про связи БД
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы