Хорошо у меня есть имя настраиваемого поля is_friendпроверка другой таблицы для состояния поля красноречивого
У меня есть 3 таблицы
1. Пользователи
2. Рабочие
3. Друзья
Как вы догадываетесь работник принадлежит пользователю, друг принадлежит рабочему.
Мой запрос, я хочу, чтобы проверить, является ли если работник друг тока, подписанного в пользователь
Друзья схемы:
Schema::create('tweets', function(Blueprint $table)
{
$table->increments('id');
$table->integer('targetID');
$table->integer('ownerID');
$table->timestamps();
}
Как видно из схемы, то targetID является идентификатором друга рабочего, ownerID является подписанным пользователем.
Мой запрос:
$worker = Worker::get('name');
Внутри модели моего рабочего
class Worker extends Eloquent{
protected $appends = array('is_friend');
public function user(){
return $this->belongsTo('user');
}
public function getIsFriendAttribute(){
if(Friend::where('targetID', $this->attributes['id'])
->where('ownerID', Auth::user()->id)->first()){
return true;
} else {
return false;
}
}
}
Я использую пользовательский аксессор, чтобы получить это пользовательское поле. Это работает, но это довольно уродливо. Если я попрошу 20 работников, будет 20 запросов, чтобы проверить этот статус.
С точки зрения, я могу получить доступ как
@if($worker->is_friend)
Your friend
@endif
Как вы запрашиваете 20 сотрудников? –
Здравствуйте, @ MarcinNabiałek, теперь я делаю 'Worker :: get ('name')', он получит все строки рабочего стола, так как я не использую никаких ограничений или где. Поэтому, если есть 20 строк, будет выведено 20, таким образом, еще 20, чтобы проверить каждую строку для этого состояния. – edward
Существует метод hasManyThrough для такого рода отношений, но я не уверен, выполнит ли он то, что вы хотите. Я отправлю ответ, если я смогу проверить его в ближайшее время. – Hkan