【问题标题】:Creating a Laravel query from SQL with Join and alias使用 Join 和别名从 SQL 创建 Laravel 查询
【发布时间】:2014-11-26 10:22:32
【问题描述】:

我在 Microsoft SQL Management Studio 中编写了一个 SQL 查询,我想在 Laravel 中编写它。

这是我的 SQL 查询。

SELECT Ordre.OrdreId, Ordre.BestiltDato, Ordre.PlanlagtFerdigDato, Ordre.FerdigDato,Ordre.FakturaDato, OAA11.Fritekst, OAA09.Dato, OAA26.Dato
from Ordre
LEFT OUTER JOIN OrdreArbeidAvdeling OAA11 ON( OAA11.AvdelingsId = 11 AND OAA11.OrdreId = Ordre.OrdreId )
LEFT OUTER JOIN OrdreArbeidAvdeling OAA09 ON( OAA09.AvdelingsId =  9 AND OAA09.OrdreId = Ordre.OrdreId )
LEFT OUTER JOIN OrdreArbeidAvdeling OAA26 ON( OAA26.AvdelingsId = 26 AND OAA26.OrdreId = Ordre.OrdreId )

Where Ordre.BestiltDato > '01.01.2013' AND Ordre.FerdigDato IS NULL AND Ordre.FakturaDato IS NULL and Ordre.PlanlagtFerdigDato < '12.24.2014'
AND (lower(OAA11.Fritekst) not LIKE '%avven%')
AND (OAA09.Dato IS NULL OR (OAA09.Dato IS NOT NULL and OAA26.Dato IS NOT NULL))
AND (lower(OAA11.Fritekst) NOT LIKE '%2015%')

使用 Laravel 的文档,除了一个连接,它在一个 where 语句中使用不同的“AvdelingsId”(9 和 26)之外,我可以完成所有操作。

AND (OAA09.Dato IS NULL OR (OAA09.Dato IS NOT NULL and OAA26.Dato IS NOT NULL))

此时我的 Laravel 代码如下所示。

$orders = DB::table('Ordre')->join('OrdreArbeidAvdeling', function($OAA11)
{
$OAA11->on('OrdreArbeidAvdeling.OrdreId','=','Ordre.OrdreId')
    ->where('OrdreArbeidAvdeling.AvdelingsId', '=', '11')
    ->where('OrdreArbeidAvdeling.Fritekst', 'not like', '%avven%')
    ->where('OrdreArbeidAvdeling.Fritekst', 'not like', '%2015%');
},'left outer')

/*->join('OrdreArbeidAvdeling', function($OAA9and26){
$OAA9and26->on('OrdreArbeidAvdeling.OrdreId','=','Ordre.OrdreId')
#What am i suppose to do with AvdelingsId = 9 and AvdelingsId = 26
#
;
},'left outer')*/


->select('Ordre.OrdreId', 'Ordre.BestiltDato', 'Ordre.PlanlagtFerdigDato', 'Ordre.FerdigDato','Ordre.FakturaDato')
    ->where('BestiltDato', '>', '2013-01-01')
    ->where('PlanlagtFerdigDato', '<', '2014-12-24')
    ->whereNull('FerdigDato')
    ->whereNull('FakturaDato')
->orderBy('OrdreId')
->get();

如果我能够使用别名,我也许就能完成这项工作。我对 Laravel 的了解也很有限,我知道我在文档中找到了任何关于如何做到这一点的建议。

【问题讨论】:

  • 你知道你可以在join中使用别名吗?像这样-&gt;join('OrdreArbeidAvdeling as OAA11', ...).
  • 不,我不知道。我会尝试一下,也许会回答我自己的问题;)

标签: php sql laravel


【解决方案1】:

您应该尝试在连接中添加别名,正如我在 cmets 中所说的那样。

类似这样的:

...->join('OrdreArbeidAvdeling as OAA11', ...)

我希望它对你有用。

【讨论】:

    猜你喜欢
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多