Laravel 5 проблема с wherePivot
Я работаю с Laravel 5 и у меня проблемы с получением->wherePivot()
работать над отношениями «многие ко многим». Когда яdd()
SQL выглядит так, как будто Eloquent ищет записи в сводной таблице со значением `pose_state` .pose_id` равно null`.
Я надеюсь, что это простая ошибка, а не ошибка. Любые идеи приветствуются.
Структура базы данныхпоза
id
name
type
государство
id
name
machine_name
pose_state
pose_id
state_id
status
моделипоза
<?php namespace App;
use DB;
use App\State;
use Illuminate\Database\Eloquent\Model;
class Pose extends Model {
public function states()
{
return $this->belongsToMany('App\State')
->withPivot('status_id')
->withTimestamps();
}
public function scopeWithPendingReviews()
{
return $this->states()
->wherePivot('status_id',10);
}
}
государственный
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class State extends Model {
public function poses()
{
return $this->belongsToMany('Pose')
->withPivot('status_id')
->withTimestamps();
}
}
Функция PosesController
public function listPosesForReview(){
$poses = Pose::withPendingReviews()->get();
dd($poses->toArray() );
}
SQL
select
`states`.*, `pose_state`.`pose_id` as `pivot_pose_id`,
`pose_state`.`state_id` as `pivot_state_id`,
`pose_state`.`status_id` as `pivot_status_id`,
`pose_state`.`created_at` as `pivot_created_at`,
`pose_state`.`updated_at` as `pivot_updated_at`
from
`states` inner join `pose_state` on `states`.`id` = `pose_state`.`state_id`
where
`pose_state`.`pose_id` is null and `pose_state`.`status_id` = ?
РЕДАКТИРОВАТЬКогда я обновил свой код, чтобы удалить область, это работало. Спасибо @Deefour за то, что поставили меня на правильный путь! Может быть, у сферы есть что-то еще, чего мне не хватает.
public function pendingReviews()
{
return $this->states()
->wherePivot('status_id','=', 10);
}
ЕЩЕ ДРУГОЕ РЕДАКТИРОВАНИЕЯ наконец получил это, чтобы работать. Решение выше дало мне повторяющиеся записи. Не знаю, почему это работает, но это так, поэтому я буду придерживаться этого.
public function scopeWithStatusCode($query, $tag)
{
$query->with(['states' => function($q) use ($tag)
{
$q->wherePivot('status_id','=', $tag);
}])
->whereHas('states',function($q) use ($tag)
{
$q->where('status_id', $tag);
});
}