Передача параметров Laravel от контроллера к модели с помощью предложения «С»

Я новичок в Ларавеле,
Я хочу передать $ id из моего контроллера в модели с помощью с

Моя модель

class Menucategory extends Model
{
protected $fillable = ['title', 'parent_id', 'restaurant_id'];

// loads only direct children - 1 level
public function children()
{
return $this->hasMany('App\Menucategory', 'parent_id');
}

// recursive, loads all descendants
public function childrenRecursive()
{
return $this->children()->with('childrenRecursive');
}
}

Мой контроллер

public function show($id)
{
$menucatagories = Menucategory::with('childrenRecursive')->where('restaurant_id',$id)->where('parent_id','0')->get();
return $menucatagories;
}

Мой текущий вывод

[
{
"id": 1,
"title": "TestMenu Parant",
"parent_id": 0,
"restaurant_id": 12,
"children_recursive": [
{
"id": 2,
"title": "TestMenu SubCat1",
"parent_id": 1,
"restaurant_id": 12,
"children_recursive": [
{
"id": 6,
"title": "TestMenu other sub cat",
"parent_id": 2,
*******************
"restaurant_id": 13,
*******************
"children_recursive": []
},
{
"id": 7,
"title": "TestMenu other sub cat",
"parent_id": 2,
"restaurant_id": 12,
"children_recursive": []
}
]
},
{
"id": 3,
"title": "TestMenu SubCat2",
"parent_id": 1,
"restaurant_id": 12,
"children_recursive": []
}
]
}
]

Я прошел $id=12 , но проблема в том, что я получаю ценности других restaurant_id в моем дочернем массиве, но если я использую это, он показывает правильный jSON

public function childrenRecursive()
{
$id=12;
return $this->children()->with('childrenRecursive')->where('restaurant_id',$id);
}

У меня вопрос: как я могу передать $ id из контроллера в модель или есть какой-то другой подход?

0

Решение

Ваш childrenRecursive совсем не так.

Смотрите здесь пример simliar: https://stackoverflow.com/a/18600698/2160816

Поэтому я думаю, что это должно работать

public function childrenRecursive($id = 12){
return $this->children()->where('restaurant_id',$id)->with('childrenRecursive');
}

Ваш контроллер может позвонить

public function show($id)
{
$menucatagories = Menucategory::where('parent_id','0')->childrenRecursive(12)->get();
return $menucatagories;
}

Я не мог проверить это, так что, возможно, он не будет работать на 100%

1

Другие решения

Вы можете задать свой параметр в самом контроллере следующим образом.

     public function show($id)
{
$menucatagories =Menucategory::with(array('childrenRecursive'=>function($query) use ($id){
$query->select()->where('restaurant_id',$id);
}))
->where('restaurant_id',$id)->where('parent_id','0')->get();
return $menucatagories;
}
0

По вопросам рекламы [email protected]