【问题标题】:Laravel scout check if relation is not empty?Laravel侦察检查关系是否不为空?
【发布时间】:2017-07-27 10:04:05
【问题描述】:

命名空间应用程序;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Scout\Searchable;

class Event extends Model
{
    protected $table = 'events';
    public $timestamps = true;

    use Searchable;
    use SoftDeletes;

    protected $dates = ['deleted_at'];

    public function entities()
    {
        return $this->belongsTo('App\Entity', 'entity_id');
    }
    public function users()
    {
        return $this->belongsTo('App\User', 'id');
    }
    public function events()
    {
        return $this->belongsTo('App\DirtyEvent', 'id');
    }
    public function toSearchableArray()
    {
        $data = $this->toArray();
        $data['entities'] = $this->entities->toArray();
        return $data;
    }
}

这是我的 Event 模型,如您所见,我正在使用 toSearchableArray ,它是 Laravel 侦察功能将“关系”导入到 algolia。然而问题是有时它是空的。比如

事件 id 1 具有 entity_id 1

但在另一个例子中

事件 id 2 的 entity_id = null

如何修改此函数以在将实体()关系放入数组之前检查它是否不为空?

【问题讨论】:

    标签: laravel laravel-5 algolia laravel-scout


    【解决方案1】:

    如果我理解正确,这应该会有所帮助。如果关系不存在,则返回一个空数组,并且 scout 不会更新索引

      public function toSearchableArray()
        {
    
          if(is_null($this->entities)){
            return [];
             }
    
           $this->entities
    
         return $this->toArray();
      }
    

    【讨论】:

      【解决方案2】:

      请更新相关的foreign_key
      user_id 作为 foreign_key 而不是 id
      event_id 作为 foreign_key 而不是 id

      public function users()
      {
          return $this->belongsTo('App\User', 'user_id');
      }
      public function events()
      {
          return $this->belongsTo('App\DirtyEvent', 'event_id');
      }
      

      【讨论】:

        【解决方案3】:

        我想如果在toArray()之前加载关系。

        public function toSearchableArray()
        {
            $this->entities;
        
            return $this->toArray();
        }
        

        【讨论】:

          猜你喜欢
          • 2018-12-25
          • 1970-01-01
          • 1970-01-01
          • 2020-06-21
          • 2013-12-23
          • 2020-02-04
          • 2017-09-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多