【问题标题】:Laravel eloquent relation for nested select query of mysqlmysql 嵌套选择查询的 Laravel 雄辩关系
【发布时间】:2015-11-18 05:43:21
【问题描述】:

对于MySQL 的嵌套select 查询,我被困在Laravel Eloquent 关系中。我的查询是这样的。

SELECT
  *,
  GROUP_CONCAT(p.facility) AS facility
FROM
  (SELECT
    `proposals`.*,
    `proposals`.`desc` AS `pending`,
    `proposals`.`Date` AS `date`,
    `pl`.`type` AS `facility`,
    `ps`.`id` AS `proposalStatusId`,
    `ps`.`status` AS `proposalStatus`
  FROM
    `proposals`
    INNER JOIN
      (SELECT
        *
      FROM
        (SELECT
          *
        FROM
          `proposal_status`
        ORDER BY `created_at` DESC) AS ps
      GROUP BY `ps`.`proposalId`
      HAVING ps.status BETWEEN 4.2
        AND 4.3) AS ps
      ON `proposals`.`id` = `ps`.`proposalId`
    INNER JOIN `proposal_long` AS `pl`
      ON `proposals`.`id` = `pl`.`proposalId`
  WHERE `proposals`.`desc` <> ''
  HAVING `proposals`.`status` = 1) AS p

当我在DB::select() 中使用并输出所需结果时,此查询工作正常。但是当 eloquent 关系实现时不起作用,如下所示。

$proposals = Proposals::having('status', DMS::PUBLISH);

$proposalsStatusRaw = proposalStatus::orderBy('created_at', 'desc');

$proposalsStatus = DB::table(DB::raw('(' . $proposalsStatusRaw->toSql() . ') AS ps'))
    ->groupBy('ps.proposalId')
    ->havingRaw('ps.status between ' . DMS::STEP_5 . ' and ' . DMS::STEP_6);

$proposalsRaw = $proposals->select('proposals.*', 'proposals.desc as pending', 'proposals.Date as date', 'pl.type AS facility', 'ps.id AS proposalStatusId', 'ps.status AS proposalStatus')
    ->join(DB::raw('(' . $proposalsStatus->toSql() . ') AS ps'), function ($query) {
        $query->on('proposals.id', '=', 'ps.proposalId');
    })
    ->join('proposal_long AS pl', function ($query) {
        $query->on('proposals.id', '=', 'pl.proposalId');
    })
    ->where('proposals.desc', '<>', '');

$proposals = DB::table(DB::raw('(' . $proposalsRaw->toSql() . ') AS p'))
    ->select('p.*', DB::raw('GROUP_CONCAT(p.facility) AS facility'));

此关系输出与前面提到的相同的查询,但结果为空值。请帮我解决这个错误。

【问题讨论】:

    标签: php mysql laravel-5 eloquent nested-select


    【解决方案1】:

    $proposalsStatusRaw = proposalStatus::orderBy('created_at', 'desc'); 替换为$proposalsStatusRaw = proposalStatus::all()-&gt;orderBy('created_at', 'desc');

    尝试通过添加dd($proposalStausRaw) 来转储$proposalStatusRaw,然后看看是否有任何结果返回。

    【讨论】:

    • 这会返回错误,因为方法 all() 不支持 orderBy() 。 .
    • 尝试使用sortByDesc('colunmName')
    • 好吧 $proposalStatusRaw 与 eloquent relationship 配合得很好。 .我在 $proposals 中遇到错误。 .
    • $proposals 变量来自哪里(在这一行中 $proposalsRaw = $proposals-&gt;select('proposals.*', 'pr)?您在代码底部声明了$proposals。你应该先声明$proposals,然后使用它。
    • 是的,我错过了提及那里的代码。 .谢谢你提醒我 。 .刚刚添加了代码。 .现在顶部关系适用于 $proposals 但最后一个关系不起作用。 .你能找出原因吗?
    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 2016-07-01
    • 2021-05-22
    • 2021-05-29
    • 2016-02-26
    • 1970-01-01
    • 2020-05-10
    • 2014-01-16
    相关资源
    最近更新 更多