簡體   English   中英

Laravel 5.2: 如何將原始查詢轉換為 eloquent?

[英]Laravel 5.2: How to convert raw query to eloquent?

這是原始查詢。

$past_period_months = Carbon::now()->subMonths(6);

$messages = DB::select(DB::raw("SELECT COUNT(*) AS count FROM messages as m WHERE conversation_id IN ( SELECT id FROM conversations WHERE (user_one = {$id} AND delete_user_one = 0 AND (m.created_at > user_one_convo_deleted_at OR  user_one_convo_deleted_at IS NULL) AND (m.created_at > user_one_msgs_deleted_at OR user_one_msgs_deleted_at IS NULL)) OR (user_two = {$id} AND delete_user_two = 0 AND (m.created_at > user_two_convo_deleted_at OR user_two_convo_deleted_at IS NULL) AND (m.created_at > user_two_msgs_deleted_at OR user_two_msgs_deleted_at IS NULL) ) ) AND is_seen = 0 AND user_id <> {$id} AND user_id NOT IN ( SELECT user_id FROM deactivateaccount ) AND ( user_id NOT IN ( SELECT id FROM users WHERE flag = 0 AND id = user_id ) OR user_id IN ( SELECT id FROM users WHERE membershiptype IN ('admin','premium','free-premium','diamond') AND id = user_id ) ) AND (hard_delete = 0 OR hard_delete IS NULL) AND (deleted_from_receiver = 0 OR deleted_from_receiver IS NULL)  AND (isflaged IS NULL OR isflaged != 1) AND m.created_at >= '{$past_period_months}' ORDER BY created_at DESC"));

return $messages[0]->count;

現在,如何將其轉換為 eloquent?

使用轉換工具,我們得到如下 output 使用這個轉換工具 jjlabajo.github.io/SQLtoEloquent

DB::table("messages as m")
->select("count (*) as count")
->whereIn("conversation_id", function($query){
    $query->from("conversations")
    ->select("id")
    ->where("(user_one", "=", {$id})
    ->where("delete_user_one", "=", 0)
    ->where("(m.created_at", ">", user_one_convo_deleted_at)
    ->whereNull("user_one_convo_deleted_at");
})
->where(DB::raw("where_subquery_group_3_)"))
->where(DB::raw("(user_two = {$id} and delete_user_two = 0 and (m.created_at > user_two_convo_deleted_at or user_two_convo_deleted_at is null)"))
->where("is_seen", "=", 0)
->where("user_id", "<>", {$id})
->where(DB::raw("( user_id not in ( select id from users where flag = 0 and id = user_id )"))
->whereIn("user_id", function($query){
    $query->from("users")
    ->select("id")
    ->whereIn("membershiptype", "('admin',");
})
->where("id", "=", user_id)
->where(DB::raw("(hard_delete = 0 or hard_delete is null)"))
->where(DB::raw("(deleted_from_receiver = 0 or deleted_from_receiver is null)"))
->where(DB::raw("(isflaged is null or isflaged != 1)"))
->where("m.created_at", ">=", {$past_period_months})
->orderBy("created_at","desc")
->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM