Как перебрать всех пользователей, не назначенных на текущий тикет? - PullRequest
1 голос
/ 08 апреля 2019

Я использую Laravel eloquent, и я хотел бы перебрать всех пользователей, которые еще не были назначены в тикете (также стоит отметить, что отношения между моими тикетами и пользователями хранятся в моей сводной таблице), чтобы Один и тот же пользователь не может быть назначен на один и тот же билет несколько раз. Мое утверждение выбора явно неверно, но мне еще предстоит выяснить, как это сделать.

TicketController.php

public function info($slug){

    //loop through all users
    //$users = \App\User::all();

    //trying to select all users not assigned to the ticket
    $users = User::select('*')->join('tickets','ticket_id','id')- 
    >where('id','!=','ticket_id')->get();

    return view ('admin.admin_info',['tickets' =>$tickets], 
    ['users'=>$users]);
}

admin_info.blade.php мой цикл foreach

  @foreach($users as $user)                                    
   <input type="checkbox" name="id" value=" {{$user->id}}">{{$user->name} <br>
  @endforeach

Модель User.php

 class User extends Authenticatable
{
use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password','admin',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];
public function tickets(){
    return$this->belongsToMany(Ticket::class,'ticket_user','id','ticket_id');
}
}  

Модель Ticket.php

  class Ticket extends Model
 {
//
public function client(){
    return $this->belongsTo(Client::class,'client_id');
}
public function users(){
    return $this- 
    >belongsToMany(User::class,'ticket_user','ticket_id','id');
}

protected $primaryKey = 'ticket_id';
public $timestamps = false;

}

1 Ответ

0 голосов
/ 08 апреля 2019

Можете ли вы попробовать это:

$ticket = Ticket::findOrFail($id);

$selected_users = $ticket->users()->pluck('users.id')->toArray();

$users = User::whereNotIn('id', $selected_users)->get(['id', 'name']);

Обратите внимание, что если имя переменной, которую вы хотите передать в блейд-файле, совпадает с тем, которое есть у вашего контроллера, вы можете просто использовать функцию compact, например:

return view ('admin.admin_info', compact('tickets', 'users'));

Затем в вашем Blade файле:

Обратите внимание, что вам не хватает одного символа завершающей скобки.

@foreach($users as $user)                                    
   <input type="checkbox" name="id" value="{{$user->id}}">{{$user->name}}<br/>
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...