Laravel多对多关系不起作用



我在Laravel关系中遇到了一个奇怪的问题。

我想访问一个有很多用户的活动(效果很好)。

<?php
$event_with_user = Event::with('registered_users')->where('id', 253)->get();
dd($event_with_user);

我想访问一个具有所有连接事件的用户:

<?php
$user_with_event = User::with('registered_events')->where('id', 1)->get();
dd($user_with_event);

我总是收到这个错误的地方:

Illuminate\Database\Eloquent\RelationNotFoundException"调用模型[App\User]上未定义的关系[Registed_events]">

我已经多次检查关系,但没有发现错误。其他人有这个问题吗?


我的型号

User.php

<?php
namespace App;
use AppEvent;
use AppUserType;
use AppEventUser;
use AppDepartment;
use AppEvaluation;
use AppUserLocation;
use IlluminateNotificationsNotifiable;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'fname', 'lname', 'email', 'password', 'phone', 'email_verified_at', 'admin', 'user_type_id', 'last_login_at', 'last_login_ip', 'user_location_id', 'user_notification_type_id', 'user_notification_setting_id', 'slack_user_id', 'joinpoints_user_id'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function registered_events() 
{
return $this->belongsToMany(Event::class, 'event_user', 'event_id', 'user_id'); 
}

}

Event.php

<?php
namespace App;
use AppUser;
use AppEventRoom;
use AppEventType;
use AppEventStatus;
use AppEventLocation;
use AppEventParticipant;
use AppEventParticipantItems;
use IlluminateDatabaseEloquentModel;
use CviebrockEloquentSluggableSluggable;
class Event extends Model
{
use Sluggable;
protected $fillable = [
'event_type_id', 'user_id', 'status', 'customer', 'slug', 'datetime', 'duration','embed_chat','number_of_participants','heading', 'description_1', 'description_2', 'livestream_link', 'logo_link', 'event_password', 'participants_per_room', 'youtube_id', 'embed_code', 'session_link', 'hide_breakout', 'help_link', 'lang', 'layout', 'btn2_text', 'btn2_link', 'help_text', 'background_url', 'black_font',
];
protected $dates = ['datetime'];
public function getRouteKeyName()
{
return 'slug';
}
/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
public function sluggable()
{
return [
'slug' => [
'source' => 'customer'
]
];
}
public function registered_users() 
{
return $this->belongsToMany(User::class, 'event_user', 'user_id', 'event_id')->withPivot('id', 'user_status', 'eventmanager', 'created_at', 'updated_at');
}

}

我的表:

  • user:id
  • 事件:id
  • event_user:id,user_id,event_id

仔细查看您的模型:

return $this->belongsToMany(Event::class, 'event_user', 'event_id', 'user_id'); 

return $this->belongsToMany(User::class, 'event_user', 'event_id', 'user_id');

虽然表是正确的,但您需要交换其中一个表上event_id和user_id的顺序。。。

看起来您交换了(外部)密钥:

User.php中:

public function registered_events() 
{
return $this->belongsToMany(Event::class, 'event_user', 'user_id', 'event_id'); 
}

Event.php中:

public function registered_users() 
{
return $this->belongsToMany(User::class, 'event_user', 'event_id', 'user_id')->withPivot('id', 'user_status', 'eventmanager', 'created_at', 'updated_at');
}

当您遵循正确的Laravel数据库结构时,您可以简单地User.php中的return $this->belongsToMany(Event::class);Event.php中的return $this->belongsToMany(User::class)->withPivot(...);

相关内容

  • 没有找到相关文章

最新更新