2016-10-12 2 views
1

I 3 Modelle wie diese:where-Klausel innerhalb einer Beziehung - Laravel

WarehousePivotCategory:

id - warehouse_id - warehouse_category_id 

Lager:

title 

WarehouseCategory:

title_en 

I‘ ve erstellt 2 hasOne Beziehungen innerhalb WarehousePivotCategory und sie funktionieren gut:

public function Warehouse() 
    { 
    return $this->hasOne('App\Models\Warehouse','id','warehouse_id'); 
    } 

    public function WarehouseCategory() 
    { 
    return $this->hasOne('App\Models\WarehouseCategory','id','warehouse_category_id'); 
    } 

in der Datenbank habe ich zwei Datensätze in warehouses Tabelle haben:

id title 
    1 AA 
    2 BB 

Ich will Titel in warehouses suchen:

$title = 'AA'; 



$warehouses = WarehousePivotCategory::with(['warehouse' => function($q) use ($title) { 
    $q->where('title', 'like', '%' . $title . '%'); 
},'WarehouseCategory'])->get(); 


    foreach ($warehouses as $w) 
    { 
     echo $w->warehouse->title; // no thing 

    } 

aber es gibt keine von title von Lagern zurück.

ist meine Beziehungen korrekt, da unten Code funktioniert gut:

WarehousePivotCategory::with('warehouse','WarehouseCategory')->paginate(10); 
+0

in der Beziehung, haben hasOne 2. param als foreign_key und 3. param als local_key. Ich glaube, du hast sie vermisst. Bitte überprüfen Sie mit der Dokumentation. https://laravel.com/docs/5.2/eloquent-relationships#one-to-one –

+0

versuchen Sie dies, in der Abfrage ändern Sie den Feldnamen als Titel. dann wirft es einen Fehler der ganzen SQL-Abfrage. In dem Versuch kannst du finden, dass etwas in Ordnung ist oder nicht. kannst du mich verstehen..? und versuche auch die ManyToMany-Beziehung. –

Antwort

0

Das ist falsch. Sie brauchen nicht hasOne zu verwenden, während Sie erstellt haben pivot.You BelongsToMany

class warehouse extends Model{ 

    public function ware_cat(){ 
     return $this->BelongsToMany('App\Models\WarehouseCategory'); 
    } 
    public function getWarehouse(){ 
     $this->with('ware_cat')->get(); 
    } 
} 

Pivot-Tabelle wird es holen verwenden müssen so in Warehouse-Modell werden Sie seine Kategorie erhalten und in der Kategorie Modell erhalten Sie die Lager gleiche bekommen Weg umgekehrt.

1

Ich denke, du vermisst Methode in Ihrem Verschluss bekommen. Probieren Sie es wie folgt aus:

$warehouses = WarehousePivotCategory::with(['warehouse' => function($q) use ($title) { 
$q->where('title', 'like', '%' . $title . '%')->get(); },'WarehouseCategory'])->get(); 

Sie auch Array von Feldern, die Sie möchten senden können holen Methode zu bekommen, wie folgt aus:

$warehouses = WarehousePivotCategory::with(['warehouse' => function($q) use ($title) { 
$q->where('title', 'like', '%' . $title . '%')->get(['id', 'title']); },'WarehouseCategory'])->get(); 
+0

Das funktioniert und beantwortet die Frage. Daher sollte dies als akzeptierte Antwort markiert werden ... – lbartolic