首页 > 解决方案 > 如何正确使用 laravel 查询生成器构建查询?

问题描述

我有两个模型:用户和消息。它们以一对多的关系绑定在一起(一个用户可以发送许多消息)。表用户有一个列“电子邮件”,表消息有一个列“r_email”(这是同一个字段)。所以我需要像“SELECT * FROM Users, Message WHERE Users.email = Message.r_email”这样的查询。我该怎么做?

我试过这样的事情:

 $messages = App\Message::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);
    }
}

标签: phplaravelpostgresql

解决方案


尝试

$messages = App\Message::with('users')->whereRaw('users.email = messages.r_email')->get();

推荐阅读