Laravel коллекция, как вернуть, где нет записей, а не по авторизации пользователя - PullRequest
0 голосов
public function tasks(Request $request)
{
    $user = auth::user();
    $query = Task::query();

    $query->with('User')->with('task_type');
    $q = $query->paginate($tasksPerPage);

    foreach ($q as $task) {
        $status = Join::where('user_id', $user->id)->where('task_id', $task->id)->first();
        if ($status['user_id'] === $user->id) {
            $task->current_status = false;
        } else {
            $task->current_status = true;
        }
    }

    return $q;
}

Как я могу вернуть только задачу, а не по аутентификации пользователя, в которой объединение не содержит записей, и не по аутентификации пользователя?Как я могу вернуть только задачи неавторизованного пользователя и в которых нет записей в другом соединении таблиц?

Task.php

    public $primaryKey = 'id';
    public $timestamps = true;
    protected $table = 'tasks';
    protected $attributes = ['current_status' => 0];
    protected $visible = ['id', 'name', 'description','user_id', 'task_type_id', 'User','joined','task_type','current_status'];

    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function task_type()
    {
        return $this->hasOne('App\TaskType', 'id', 'task_type_id');
    }

    public function joined()
    {
        return $this->hasManyThrough('App\Join', 'App\Task', 'id', 'task_id', 'id', 'id');
    }

Join.php

    public function task()
    {
        return $this->belongsToMany('App\Task', 'join_task');
    }
        public function user_join()
    {
        return $this->belongsTo('App\User', 'user_id', 'id');
    }

Ответы [ 2 ]

0 голосов

Решение -

Task.php

    public function join()
    {
        return $this->hasOne('App\Join','task_id');
    }

TaskController.php

 $user = Auth::user();
 $query->where('user_id', '!=', $user->id)
                ->WhereDoesntHave('join', function (Builder $query) use($user){
                $query->where('user_id', 'like', $user->id);
            });
0 голосов
/ 07 мая 2019

Я не думаю, что вы должны пойти в базу данных внутри цикла. это займет больше времени и это не очень хорошая практика.

просто сделайте это с whereHas, вы можете прочитать об этом в самой документации WhereHas

для этого вы можете просто сделать это следующим образом.

    Task::whereHas('User',function($q) use($user_id){
        $q->where('user_id','!=',$user_id);
    })->get();

просто получает все записи, которые не имеют текущего user_id, или вы можете сделать это для получения всех записей, которые соответствуют текущему user_id

    $q->where('user_id',$user_id);
...