morphTo((的方法签名为:
public function morphTo($name = null, $type = null, $id = null, $ownerKey = null)
{
....
在laravel文档示例中,$name、$type、$id、$ownerKey是什么意思?
帖子id-整数name字符串
用户id-整数name字符串
图像id-整数url-字符串imageable_id-整数imageable_type字符串
如果遵循Laravel的命名约定,则不需要向该方法添加任何参数。
以下是morphTo
方法的参数分解:
-
$name
用于定义关系名称(如果与方法名称不同(。这也用于计算数据库中多态字段的名称(如果未作为$type
或$id
传递(。如果$name
保留为null
,它将使用关系的方法名称,即public function imageable() { return $this->morphTo(); }
以上内容与写作相同:
public function imageable() { return $this->morphTo('imageable'); }
这将告诉Laravel使用
imageable_id
和imageable_type
作为数据库字段名。public function imageModel()
将导致关系被访问为
$model->imageModel
,然而,它将使用的数据库字段名称将是image_model_id
和image_model_type
。 -
$type
和$id
这些可用于分别覆盖从第一个参数假定的字段名称,例如,如果您的字段名称类似于owner_id
和owner_model
,但您仍然希望关系可成像,则可以执行:public function imageable() { return $this->morphTo('imageable', 'owner_model', 'owner_id'); }
-
$ownerKey
这只是相关表上的字段名。您可以使用它来告诉Laravel使用与相关实例定义为$primaryKey
的字段名称不同的字段名称。