0

morphTo() 的方法签名是:

public function morphTo($name = null, $type = null, $id = null, $ownerKey = null)
{
    ....

$name, $type, $id, $ownerKey 在 laravel 文档示例中是什么意思?

帖子 id - 整数名称 - 字符串

用户 id - 整数名称 - 字符串

图像 id - 整数 url - 字符串 imageable_id - 整数 imageable_type - 字符串

4

1 回答 1

1

如果你遵循 Laravel 的命名约定,那么你不需要在方法中添加任何参数。

以下是该morphTo方法的参数细分:

  • $name
    这用于定义关系名称(如果它与方法名称不同)。这也用于找出数据库中多态字段的名称(如果不作为$typeor传递$id)。If $nameis left as nullit will use the method name of the relationship 即

    public function imageable() 
    {
        return $this->morphTo();
    }
    

    以上与写法相同:

    public function imageable() 
    {
        return $this->morphTo('imageable');
    }
    

    这将告诉 Laravel 使用imageable_idimageable_type作为数据库字段名称。

    public function imageModel()
    

    将导致关系被访问$model->imageModel,但是,它将使用的数据库字段名称将是image_model_idand image_model_type

  • $type并且$id
    这些可用于分别覆盖将从第一个参数假定的字段名称,例如,如果您的字段名称类似于owner_id并且owner_model您仍然希望关系是可成像的,那么您可以这样做:

    public function imageable() 
    {
        return $this->morphTo('imageable', 'owner_model', 'owner_id');
    }
    
  • $ownerKey
    这只是相关表上的字段名称。$primaryKey您可以使用它来告诉 Laravel 使用与相关实例定义的字段名称不同的字段名称。

于 2020-05-10T09:22:47.503 回答