[英]Please How to convert this raw sql query to laravel eloquent or query builder?
[英]How to convert this SQL query to laravel eloquent or query builder
這是我的聊天表的表格結構
Schema::create('chats', function (Blueprint $table) {
$table->bigIncrements('id');
$table->enum('block', ['no', 'yes'])->default('no');
$table->timestamps();
$table->bigInteger('user_one')->unsigned();
$table->foreign('user_one')
->references('id')
->on('users')
->onDelete('cascade');
$table->bigInteger('user_two')->unsigned();
$table->foreign('user_two')
->references('id')
->on('users')
->onDelete('cascade');
});
這是我的chat_messages表的一個
Schema::create('chat_messages', function (Blueprint $table) {
$table->increments('id');
$table->enum('viewed', ['no', 'yes'])->default('no');
$table->string('msg', 1000);
$table->timestamps();
$table->bigInteger('chat_id')->unsigned();
$table->foreign('chat_id')
->references('id')
->on('chats')
->onDelete('cascade');
$table->bigInteger('user_id')->unsigned();
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
});
我現在的問題是我想運行這個在phpmyadmin中工作正常的查詢
SELECT U.id,C.id,U.name,U.email FROM users as U, chats as C, chat_messages as M WHERE CASE WHEN C.user_one = '2' THEN C.user_two = U.id WHEN C.user_two = '2' THEN C.user_one= U.id END AND C.id = M.chat_id AND (C.user_one ='2' OR C.user_two ='2') ORDER BY C.id DESC
這是我使用Laravel查詢構建器的上述查詢版本,它似乎不起作用
$authUser = Auth::user()->id;
$chatList = DB::select(DB::raw('U.id, C.id, U.name'))
->from(DB::raw('users as U, chats as C, chat_messages as M'))
->where(DB::raw('CASE
WHEN C.user_one = '.Auth::user()->id.'
THEN C.user_two = U.id
WHEN C.user_two = '.Auth::user()->id.'
THEN C.user_one= U.id END'))
->where('C.id', '=', 'M.chat_id')
->where(function($query) use ($authUser) {
$query->where('C.user_one', '=', $authUser)
->orWhere('C.user_two', '=', $authUser);
})
->orderBy('C.id', 'desc')
->get();
它出了這個錯誤
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'U.id, C.id, U.name' at line 1 (SQL: U.id, C.id, U.name)
我已經嘗試了很多方法,但似乎沒有工作......我需要你的幫助才能弄清楚如何解決這個問題...謝謝
這里是
$authUser = Auth::user()->id;
$chatList = DB::table(DB::raw('users as U, chats as C, chat_messages as M'))
->select(DB::raw('U.id, C.id, U.name, U.email'))
->whereRaw('CASE
WHEN C.user_one = '.Auth::user()->id.'
THEN C.user_two = U.id
WHEN C.user_two = '.Auth::user()->id.'
THEN C.user_one= U.id END
AND C.id = M.chat_id AND
(C.user_one = '.$authUser.' OR C.user_two = '.$authUser.')')
->orderBy('C.id', 'DESC')
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.