laravel 5 Поиск похожих моделей - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть две родственные модели.

 class Girl extends Model
    {
     public function target()
        {
            //return $this->hasOne('App\Target');
            return $this->belongsToMany('App\Target', 'girl_target', 'girl_id',
                'target_id');
        }
    }

И

class Target extends Model
{
  public function girl()
    {
        return $this->belongsToMany('App\Girl', 'girl_target');
    }
}

Как я могу найти модель девушки по связанному идентификатору цели?

  $girls = Girl::where('banned', 0)
             ->with('target');

 $targets=$seachSettings->target()->get();
            if($targets!=null){
                foreach ($targets as $item) {
                    //     $girls->target()->array_where();
                    $girls->target()->where('girl_target','target_id',$item->id);
                }
            }

Я хочу получить только модели, в которых есть связанные цели с идентификатором из массив моих целей $.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Вам нужно использовать whereHas() метод

$girls = Girl::whereHas('target', function ($query) use($item) {
    $query->where('id', $item->id);
})->where('banned', 0)->with('target');
0 голосов
/ 06 апреля 2020

определяют отношения между Girl и Target

class Girl extends Model
    {
     public function target(): HasMany
        {
            return $this->hasMany('App\Target', 'foreign_key', 'local_key');
        }
    }

class Target extends Model
{
  public function girl(): BelongsTo
    {
        return $this->belongsTo('App\Girl', 'foreign_key', 'local_key');
    }
}

, а затем, если вы хотите получить цели для девушек, просто позвоните

$targets = Girl::find(1)->target;

или если вы хотите получить девушка по цели

$girl = Target::find(1)->girl;
...