将Mysql查询转换为Laravel Eloquent

时间:2015-09-23 11:35:21

标签: mysql laravel-5.1

我在我的应用程序中使用Laravel 5.1。

我的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 Eloquent中转换它?我不知道如何在laravel雄辩中使用when case

我的数据库架构就像这样

user_countenter image description here

userenter image description here

total_payment

enter image description here

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

使用DB :: statement(&#34;&#34;)围绕您的原始查询,如下所示:

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)");

它可以很好地完成工作并且也可以使用种子。

答案 1 :(得分:0)

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

它不是DBAL,但您仍然可以通过DB Facade执行SQL查询。

您提供的示例,用户表可以是Eloquent对象。

maticnaploca matplo= new maticnaploca ();
matplo.setVisible(true);

从现在起,您可以获取所有用户行,如:

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

或者你可以通过PK找到一个:

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