2015-08-13 19 views
6

Tôi không chắc mình đang đặt câu hỏi một cách chính xác, nhưng đây là những gì tôi đang cố gắng làm.Làm cách nào để lấy mô hình hiện tại từ phương thức tùy chỉnh trong laravel

Vì vậy, chúng tôi có thể nhận được dòng điện từ

$model = Model::find($id)

Sau đó, chúng ta có thể nhận được đó là những mối quan hệ như:

$model->relationships()->id

Sau đó, chúng tôi có những hành động như:

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

Câu hỏi của tôi là, chúng ta có thể có một phương pháp tùy chỉnh như:

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

và trong mô hình nó có thể trông giống như:

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

Nhưng xa hơn nữa, làm thế nào trong customMethod tôi sẽ nhận được thông tin $models như id?

Xin lỗi nếu điều này có thể hơi khó hiểu.

Trả lời

2

Trước hết, nếu bạn muốn truy cập một đối tượng liên quan, bạn thực hiện việc này bằng cách truy cập thuộc tính có cùng tên với mối quan hệ. Trong trường hợp của bạn, để truy cập vào đối tượng (s) từ mối quan hệ, bạn cần phải làm điều này bằng:

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

thay vì

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

Thứ hai, nếu bạn muốn truy cập các thuộc tính trên đối tượng liên quan, bạn có thể thực hiện theo cùng một cách:

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

Cuối cùng, nếu bạn muốn gọi một phương thức trên một mô hình liên quan, bạn cần triển khai phương thức này trong lớp mô hình liên quan.

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 
} 

Bạn có thể đọc thêm về cách xác định và sử dụng các mối quan hệ ở đây: http://laravel.com/docs/5.1/eloquent-relationships

+0

Ok, tôi làm theo, không làm việc này nếu mối quan hệ nhiều hơn một? đưa ra ví dụ của bạn, nó sẽ in ra tất cả các ID? –

+0

Nếu bạn có một bộ sưu tập các đối tượng bạn cần phải lặp qua bộ sưu tập và gọi nó trên mọi đối tượng. Tôi đã cập nhật câu trả lời –

Các vấn đề liên quan