2015-08-13 8 views
6

Ich bin mir nicht sicher, dass ich die Fragen richtig stelle, aber das ist, was ich versuche zu tun.Wie bekomme ich das aktuelle Modell von benutzerdefinierten Methode in Laravel

So können wir den Strom von

$model = Model::find($id)

bekommen Dann können wir es Beziehungen wie bekommen:

$model->relationships()->id

Dann haben wir Aktionen wie:

$model->relationships()->detach(4);

Meine Frage ist, können wir eine eigene Methode, wie haben:

$model->relationships()->customMethod($params);?

und im Modell es aussehen kann:

public function customMethod($params){ 
     //Do something with relationship id 
    } 

aber weiter mehr, wie in den customMethod würde ich die $models Informationen wie id?

Es tut uns leid, wenn dies ein wenig verwirrend sein kann.

Antwort

2

Zuerst, wenn Sie auf ein verwandtes Objekt zugreifen möchten, tun Sie dies, indem Sie auf ein Attribut mit dem gleichen Namen wie die Beziehung zugreifen. In Ihrem Fall, um Objekt zuzugreifen (e) von Beziehungen, müssen Sie dies tun, indem sie:

$model->relationships //returns related object or collection of objects 

statt

$model->relationships() //returns relation definition 

Zweitens, wenn Sie Attribute zugreifen möchten auf dem zugehörigen Objekt, können Sie es auf die gleiche Weise tun:

$relatedObjectName = $model->relationship->name; // this works if you have a single object on the other end of relations 

Schließlich Wenn Sie eine Methode für ein verwandtes Modell aufrufen möchten, müssen Sie diese Methode in der zugehörigen Modellklasse implementieren.

class A extends Eloquent { 
    public function b() { 
    return $this->belongsTo('Some\Namespace\B'); 
    } 

    public function cs() { 
    return $this->hasMany('Some\Namespace\C'); 
    } 
} 

class B extends Eloquent { 
    public function printId() { 
    echo $this->id; 
    } 
} 

class C extends Eloquent { 
    public function printId() { 
    echo $this->id; 
    } 
} 

$a = A::find(5); 
$a->b->printId(); //call method on related object 
foreach ($a->cs as $c) { //iterate the collection 
    $c->printId(); //call method on related object 
} 

Sie können mehr darüber lesen, wie und Beziehungen hier Verwendung zu definieren: http://laravel.com/docs/5.1/eloquent-relationships

+0

Ok, ich folge, funktioniert das, wenn die Beziehung ist mehr als ein? Wie würden Sie bei Ihrem Beispiel alle IDs ausdrucken? –

+0

Wenn Sie eine Sammlung von Objekten haben, müssen Sie die Sammlung durchlaufen und für jedes Objekt aufrufen. Ich habe die Antwort aktualisiert –