将Mysql查询转换为Laravel Eloquent

将Mysql查询转换为Laravel Eloquent,mysql,laravel-5.1,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

我在应用程序中使用了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
我怎样才能把它转换成拉威尔雄辩?我不知道如何使用时,在拉雷维尔案件雄辩

我的数据库模式如下

用户计数表

用户表

总付款表


有人能帮我吗?

Eloquent是一种ORM对象关系映射,它意味着您可以使用活动记录模式将数据库映射到PHP对象Eloquent

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

在您提供的示例中,用户表可以是一个有说服力的对象

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

只需使用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)");

它将很好地完成这项工作,并与种子一起工作。

我已经使用DB Facade运行了此查询。但我想把这个问题转化为Laravel Elotent。那我该怎么做呢?我已经为每个表创建了模型。我不知道为什么要使用Eloquent而不是使用DB facade的直接SQL查询来执行此操作。@我认为执行此查询需要太多时间,所以我认为如果使用Eloquent运行它会更好。我想你不明白什么是Eloquent。Eloquent不会加快你的速度数据库查询。如果有的话,它可能会增加时间,因为所有的orm都有一点开销。在较低的SQL级别,Laravel仍然发送MySQL相同的查询,DBS只理解SQL周期,它仍然是相同的选择、插入、更新。ORM可以生成更可读的优雅代码。与代码中的一堆冗长杂乱的查询和字符串连接不同,您可以执行诸如User::all之类的操作,然后可以访问诸如User->name;这实际上是为了可读性和可移植性,没有特定的sql=portable。我想用雄辩的语言来运行它