2015-08-13 22 views
6

Nie jestem pewien, czy zadaję poprawnie pytania, ale to właśnie próbuję zrobić.Jak uzyskać bieżący model z niestandardowej metody w laravel

Więc możemy uzyskać prąd z

$model = Model::find($id)

Wtedy możemy dostać to relacje typu:

$model->relationships()->id

Następnie mamy czynności, takich jak:

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

Moje pytanie brzmi, możemy mieć niestandardową metodę jak:

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

aw modelu może wyglądać następująco:

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

Ale jeszcze bardziej, jak w customMethod chciałbym uzyskać $models informacje jak id?

Przepraszam, jeśli to może być nieco mylące.

Odpowiedz

2

Przede wszystkim, jeśli chcesz uzyskać dostęp do powiązanego obiektu, robisz to, uzyskując dostęp do atrybutu o tej samej nazwie, co relacja. W twoim przypadku, w celu uzyskania dostępu do obiektu (ów) z relacji, trzeba to zrobić poprzez:

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

zamiast

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

drugie, jeśli chcesz uzyskać dostęp do atrybutów na powiązanego obiektu, można zrobić to w taki sam sposób:

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

Wreszcie, jeśli chcesz wywołać metodę na powiązanym modelu, musisz wdrożyć tę metodę w powiązanej klasie modelu.

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 
} 

Możesz przeczytać więcej o tym, jak definiować i wykorzystanie relacje tutaj: http://laravel.com/docs/5.1/eloquent-relationships

+0

ok, śledzę, to działa, jeśli związek jest więcej niż jeden? biorąc pod uwagę twój przykład, czy wydrukuje wszystkie identyfikatory? –

+0

Jeśli masz kolekcję obiektów, musisz wykonać iterację w kolekcji i wywołać ją na każdym obiekcie. Zaktualizowałem odpowiedź –