#laravel #eloquent
#laravel #красноречивый
Вопрос:
Я использую Laravel eloquent, и я хотел бы перебрать всех пользователей, которым еще не был назначен билет (также стоит отметить, что связь между моими билетами и пользователями хранится в моей сводной таблице), так что одному и тому же пользователю нельзя назначать один и тот же билет несколько раз. Мой оператор select явно неверен, но мне еще предстоит выяснить, как это сделать.
TicketController.php
public function info($slug){
//loop through all users
//$users = AppUser::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:
Не могли бы вы, пожалуйста, попробовать это:
$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'));
Затем в вашем блейд-файле:
Пожалуйста, обратите внимание, что вам не хватает одного символа в конечной скобке.
@foreach($users as $user)
<input type="checkbox" name="id" value="{{$user->id}}">{{$user->name}}<br/>
@endforeach