如何从 laravel 中的自定义方法获取当前模型
How do I get the current model from custom method in laravel
我不确定我问的问题是否正确,但这就是我正在尝试做的。
所以我们可以从
得到电流
$model = Model::find($id)
然后我们可以得到它的关系:
$model->relationships()->id
然后我们有如下操作:
$model->relationships()->detach(4);
我的问题是,我们可以有一个自定义方法吗:
$model->relationships()->customMethod($params);
?
在模型中它可能看起来像:
public function customMethod($params){
//Do something with relationship id
}
但更进一步,我如何在 customMethod
中获得像 id 这样的 $models
信息?
对不起,如果这可能有点令人困惑。
首先,如果要访问相关对象,可以通过访问与关系同名的属性来实现。在您的情况下,为了从 关系 访问对象,您需要通过以下方式执行此操作:
$model->relationships //returns related object or collection of objects
而不是
$model->relationships() //returns relation definition
其次,如果你想访问相关对象的属性,你可以这样做:
$relatedObjectName = $model->relationship->name; // this works if you have a single object on the other end of relations
最后,如果要在相关模型上调用方法,则需要在相关模型中实现此方法class。
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
}
您可以在此处详细了解如何定义和使用关系:http://laravel.com/docs/5.1/eloquent-relationships
我不确定我问的问题是否正确,但这就是我正在尝试做的。
所以我们可以从
得到电流$model = Model::find($id)
然后我们可以得到它的关系:
$model->relationships()->id
然后我们有如下操作:
$model->relationships()->detach(4);
我的问题是,我们可以有一个自定义方法吗:
$model->relationships()->customMethod($params);
?
在模型中它可能看起来像:
public function customMethod($params){
//Do something with relationship id
}
但更进一步,我如何在 customMethod
中获得像 id 这样的 $models
信息?
对不起,如果这可能有点令人困惑。
首先,如果要访问相关对象,可以通过访问与关系同名的属性来实现。在您的情况下,为了从 关系 访问对象,您需要通过以下方式执行此操作:
$model->relationships //returns related object or collection of objects
而不是
$model->relationships() //returns relation definition
其次,如果你想访问相关对象的属性,你可以这样做:
$relatedObjectName = $model->relationship->name; // this works if you have a single object on the other end of relations
最后,如果要在相关模型上调用方法,则需要在相关模型中实现此方法class。
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
}
您可以在此处详细了解如何定义和使用关系:http://laravel.com/docs/5.1/eloquent-relationships