将原始 SQL 翻译成 Eloquent

Translating raw SQL to Eloquent

请帮我解决这个问题。

SELECT d.date, d.id, d.message, u.username 
FROM dialogs d JOIN users u ON d.user_id = u.id 
AND d.is_deleted = 0 
WHERE d.id > ? ORDER BY d.id DESC LIMIT 30

有作者留言。现在我正在使用 DB::select 进行此查询,但想要类似的东西:

Dialog::all(['date', 'id', 'message'])
            ->where('is_deleted', '=', 0)
            ->with('user')
            ->idDescending()
            ->take(30)
            ->get();

Laravel 4.2

少加。仅当所选字段列表包含本地键和外键时才有效。

Dialog::with('user') ->where('is_deleted', '=', 0) ->orderBy('id', 'desc') ->take(30) ->get(['date', 'id', 'message', 'user_id']);

public function user() { return $this->belongsTo('User')->select(['username', 'id']); }

如果没有密钥,则用户为空。

如果你的关系设置正确,这应该很好:

$rows = Dialog::with('user') ->where('is_deleted', '=', 0) ->orderBy('id', 'desc') ->take(30) ->get(['date', 'id', 'message'])

您应该可以访问

的用户

foreach($rows as $row){ $row->user->username; }