我有两个模型:用户和消息。它们与一对一的关系绑定在一起(一个用户可以发送许多消息(。表用户有一个"电子邮件"列,而表消息则具有" r_email"列(这是同一字段(。因此,我需要进行查询,例如"从用户中选择 *",messaess users.email = message.r_email。我该怎么做?
我尝试了这样的事情:
$messages = AppMessage::with('users')->where('users.email', '=', 'messages.r_email')->get();
,但这给了我错误。什么问题?
模型以这种方式绑定:
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* 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 messages()
{
return $this->hasMany(Message::class);
}
}
和消息模型的代码:
class Message extends Model
{
protected $fillable = ['message', 'r_email'];
public function user()
{
return $this->belongsTo(User::class);
}
}
尝试
$messages = AppMessage::with('users')->whereRaw('users.email = messages.r_email')->get();
尝试此
$messages = DB::table('users')
->leftJoin('message', 'users.email', '=', 'message.r_email')
->get();
希望这个帮助。