Laravel Pass Parameter von der Steuerung ‚Mit‘ Klausel zu Modell

stimmen
0

Ich bin neu in Laravel, ich möchte das der $ id von meinem Controller im Modell mit Klausel übergeben

Mein Modell

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');
  }
}

My-Controller

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

Mein Stromausgang

[
  {
    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: []
      }
    ]
  }
]

Ich ging $id=12, aber das Problem ist , ich die Werte von anderen bekommen restaurant_idin meinem Kind Array, aber wenn ich diese verwenden zeigt es die richtigejSON

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

meine Frage ist, wie kann ich die $ id von der Steuerung an das Modell übergeben oder gibt es eine andere Lösung?

Veröffentlicht am 24/08/2016 um 11:52
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Sie können Ihre Parameter in Steuerung selbst in der folgenden Art und Weise ass.

     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;
      }
Beantwortet am 24/08/2016 um 12:01
quelle vom benutzer

stimmen
0

Sie childrenRecursiveist gar nicht so falsch.

Sehen Sie hier ein simliar Beispiel: https://stackoverflow.com/a/18600698/2160816

Also ich denke, das sollte funktionieren

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

Der Controller dann könnte nennen

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

Ich konnte es nicht testen, so kann es nicht zu 100% arbeiten

Beantwortet am 24/08/2016 um 12:03
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more