x
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;
}
How can I return only a task, not by user auth wherein the join no records and not by auth user? How can I only return tasks of an unauthorized user and where there are no records in another table join?
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('AppUser');
}
public function task_type()
{
return $this->hasOne('AppTaskType', 'id', 'task_type_id');
}
public function joined()
{
return $this->hasManyThrough('AppJoin', 'AppTask', 'id', 'task_id', 'id', 'id');
}
Join.php
public function task()
{
return $this->belongsToMany('AppTask', 'join_task');
}
public function user_join()
{
return $this->belongsTo('AppUser', 'user_id', 'id');
}
Advertisement
Answer
Solution is
Task.php
public function join()
{
return $this->hasOne('AppJoin','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);
});