2015-09-23 82 views
1

我在我的应用程序中使用Laravel 5.1。将Mysql查询转换成Laravel雄辩

我的MySQL查询是

SELECT * FROM (SELECT uu.*,t.left_id AS meb_id,(CAST(t.pair AS UNSIGNED) - IFNULL(p.pair,0)) AS pair FROM (SELECT left_id, 
(CASE 
WHEN ((SELECT COUNT(meb_id) FROM user_count WHERE left_id=u.left_id AND active = 1 AND join_date <= '1442255400000') >= (SELECT COUNT(meb_id) FROM user_count WHERE right_id=u.left_id AND active = 1 AND join_date <= '1442255400000')*2) 
THEN (SELECT COUNT(meb_id) FROM user_count WHERE right_id=u.left_id AND active = 1 AND join_date <= '1442255400000') 
WHEN ((SELECT COUNT(meb_id) FROM user_count WHERE left_id=u.left_id AND active = 1 AND join_date <= '1442255400000') < (SELECT COUNT(meb_id) FROM user_count WHERE right_id=u.left_id AND active = 1 AND join_date <= '1442255400000')*2) 
THEN ((SELECT COUNT(meb_id) FROM user_count WHERE right_id=u.left_id AND active = 1 AND join_date <= '1442255400000') /2) 
WHEN ((SELECT COUNT(meb_id) FROM user_count WHERE right_id=u.left_id AND active = 1 AND join_date <= '1442255400000') >= (SELECT COUNT(meb_id) FROM user_count WHERE left_id=u.left_id AND active = 1 AND join_date <= '1442255400000')*2) 
THEN (SELECT COUNT(meb_id) FROM user_count WHERE left_id=u.left_id AND active = 1 AND join_date <= '1442255400000') 
WHEN ((SELECT COUNT(meb_id) FROM user_count WHERE right_id=u.left_id AND active = 1 AND join_date <= '1442255400000') < (SELECT COUNT(meb_id) FROM user_count WHERE left_id=u.left_id AND active = 1 AND join_date <= '1442255400000')*2) 
THEN ((SELECT COUNT(meb_id) FROM user_count WHERE left_id=u.left_id AND active = 1 AND join_date <= '1442255400000')/2) END 
) AS pair 
FROM user_count AS u WHERE left_id <> 0 GROUP BY left_id) AS t 
LEFT JOIN users AS uu ON uu.`id` = t.left_id 
LEFT JOIN `total_payment` p ON t.left_id = p.`meb_id` 
WHERE t.pair <> 0) AS f WHERE f.pair > 0 AND f.active = 1 

我怎样才能把它转换在Laravel雄辩?我不知道如何在laravel雄辩中使用when case

我的数据库架构是这样的

user_countenter image description here

userenter image description here

total_payment

enter image description here

任何人都可以帮助我吗?

+0

不知道我明白你为什么想要用数据库正面使用直接SQL查询来进行这项工作。 – Pitchinnate

+0

@Pitchinnate 这个查询需要太多的时间来执行,所以我想如果我用雄辩运行它会更好。 –

+1

我不认为你明白了那时的雄辩。 – Pitchinnate

回答

0

Eloquent是一个ORM(对象关系映射),它意味着您可以将数据库映射到PHP对象(Eloquent使用Active Record模式)。

它不是DBAL,但仍然可以通过数据库外观执行SQL查询。

您提供的示例中,user表可以是一个Eloquent对象。

class User extends Model{ 
    /** 
    * The table associated with the model. 
    * 
    * @var string 
    */ 
    protected $table = 'user'; 
} 

既然现在你可以获取所有用户像行:

$userCollection = (new User)->all(); //Fetch all rows 

或者您也可以通过PK就像找到一个:

$user = (new User)->find(123); //123 is the PK of the User 
+0

我已经使用数据库外观运行此查询。 但我想将此查询转换为Laravel Eloquent。 那么我该如何做到这一点? 我为每个表格创建了模型。 –

1

只是围绕您的原始查询与DB ::声明(“”),如下所示:

DB::statement("INSERT INTO `mydatabase`.`mytable` (`id`, `created_at`, `updated_at`, `deleted_at`) VALUES ('7', '2015-09-26 13:38:48', '2015-09-26 13:43:41', NULL)"); 

它会做的很好,并与种子一起工作。

+0

我已经在使用'DB :: statement(“”)'运行这个查询了。 我想用'Eloquent'运行它 –