我如何正确地使用Laravel查询构建器构建查询



我有两个模型:用户和消息。它们与一对一的关系绑定在一起(一个用户可以发送许多消息(。表用户有一个"电子邮件"列,而表消息则具有" 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();

希望这个帮助。

最新更新