#laravel #eloquent
#laravel #eloquent
Вопрос:
У меня есть users
таблица
У меня есть events
таблица
У меня есть portal_event_users
таблица
Я пытаюсь найти всех пользователей и их имена, зарегистрированные для события. Пожалуйста, посоветуйте, какое отношение eloquent мне использовать для доступа к данным пользователя, как показано ниже
public static function getstudents($event_id) {
try {
if ($event_id) {
$eventobj = AppModelsEvent::find($event_id);
if (!empty($eventobj)) {
$response = ['users' => $eventobj->students->users];
return response()->json($response);
}
}
} catch (Exception $ex) {
}
}
Это то, что я добавил в модель событий
class Event extends Model
{
use HasFactory;
protected $table = 'portal_events';
public function students()
{
return $this->hasMany(EventUser::class);
}
}
Моя модель EventUser
class EventUser extends Model
{
use HasFactory;
protected $table = 'portal_event_users';
public function users()
{
return $this->belongsToMany(User::class,'portal_event_users','event_id','user_id')->withTimeStamps();//,'user_id','event_id');
}
public function events()
{
return $this->belongsToMany(Event::class);
}
}
Ответ №1:
Вы можете напрямую связывать события с пользователями, используя отношения belongstomany и сводную таблицу portal_event_users
class Event extends Model
{
use HasFactory;
protected $table = 'portal_events';
public function users()
{
return
$this>belongsToMany(User::class,'portal_event_users','event_id','user_id')->withTimeStamps();
}
public function students()
{
return $this->hasMany(EventUser::class);
}
}
затем вы можете вызвать $event-> users для пользователей, связанных с этим событием
подробнее см. https://laravel.com/docs/8.x/eloquent-relationships#many-to-many
кроме того, вам не нужно создавать модель для сводной таблицы, если вам не нужно напрямую обновлять их