【问题标题】:How to set up morphTo() parameters如何设置 morphTo() 参数
【发布时间】:2020-05-10 08:49:44
【问题描述】:

morphTo() 的方法签名是:

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

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

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

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

图片 id - 整数 网址 - 字符串 imageable_id - 整数 imageable_type - 字符串

【问题讨论】:

    标签: laravel eloquent laravel-relations


    【解决方案1】:

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

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

    • $name
      这用于定义关系名称(如果它与方法名称不同)。这也用于找出数据库中多态字段的名称(如果没有传递为$type$id)。如果$name 保留为null,它将使用关系的方法名称,即

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

      以上与写法相同:

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

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

      public function imageModel()
      

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

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

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

    【讨论】:

    • 设置这个值可以避免调用更多的方法,这样执行速度会更快一点,这样的想法是否有效?
    猜你喜欢
    • 2015-12-25
    • 2013-11-30
    • 2019-04-10
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多