Задать вопрос
@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 Оценить Комментировать
Решения вопроса 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->{свойство};
}
}


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

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

Похожие вопросы