【问题标题】:Object of class Closure could not be converted to string laravel类闭包的对象无法转换为字符串 laravel
【发布时间】:2019-03-18 06:35:22
【问题描述】:

我正在经历这个查询的多次迭代,我假设我在查询中的某个地方遗漏了一些东西,导致我收到如下错误:

闭包类的对象无法转换为字符串

我的查询:

$test = UnitStandard::select(DB::raw("
                    count(t1.code),
                    t1.code,
                    t1.id,
                    t1.provider_id,
                    t1.name,
                    t1.nqf_level,
                    t1.credits,
                    t1.type,
                    MAX(t1.shared_id),
                    setas.name as setaName,
                    providers.name as providerName
"))
->from(function ($query){

        $query->select(DB::raw("*"))
            ->from("unit_standards")
            ->where("provider_id", "=", 1)
            ->whereNull("shared_id")
            ->orWhere("shared_id", "=", 2)
            ->orderBy("unit_standards.code", "asc");
})
->join('setas', 't1.seta_id', '=', 'setas.id')
->join('providers', 't1.provider_id', '=', 'providers.id')
->where('shared_id', '=', 2)
->orWhere('t1.provider_id', '=', 1)
->groupBy('code')
->havingRaw('COUNT(code) >= 1')
->orderBy('code', 'asc')
->paginate(50);

更新

查看下面的完整错误 sn-p

更新

原始工作 MySQL:

 SELECT 
count(t1.code), 
t1.code, 
t1.id,
t1.provider_id, 
t1.name,
t1.nqf_level,
t1.credits,
t1.type,
MAX(t1.shared_id),
setas.name as setaName,
providers.name as providerName
FROM(
SELECT * FROM unit_standards WHERE (provider_id = 1 AND shared_id IS NULL) OR shared_id = 2 ORDER BY `unit_standards`.`code` ASC
) AS t1
JOIN setas on t1.seta_id = setas.id
JOIN providers on t1.provider_id = providers.id
WHERE t1.shared_id = 2 OR t1.provider_id = 1
GROUP BY code
HAVING COUNT(code) >= 1
ORDER BY code ASC
LIMIT 50

【问题讨论】:

  • 您能再分享一些代码,以便我们可以帮助您吗?
  • @AnkurTiwari 没有更多代码,这是一个索引页面的查询,所以我之后要做的就是返回我的视图,目前是一个 dd();
  • 请向我们展示完整的错误消息,并向我们展示它抱怨的行。
  • 我怀疑from() 可以使用回调作为参数。

标签: php mysql laravel


【解决方案1】:

感谢@NigelRen 的建议,我能够解决我遇到的问题。理想情况下,我希望通过单个查询获得相同的结果,但目前还可以。

找到解决方案in this question:

 $subQuery = DB::table('unit_standards')->selectRaw('nqf_level,name, id, code, provider_id, shared_id, COUNT(code) as totalCodeCount, credits, type, seta_id')
            ->where('provider_id', '=', '1')
            ->whereNull('shared_id')
            ->orWhere('shared_id', '=', '2')
            ->groupBy('id','code','provider_id', 'shared_id', 'name', 'nqf_level', 'credits', 'type', 'seta_id')
            ->orderBy("code", "asc");


        $sharedUnitstandards = \DB::table(\DB::raw('('.$subQuery->toSql().') as t1'))
            ->selectRaw("t1.code, t1.id, t1.provider_id, t1.name, t1.nqf_level, t1.credits, t1.type, MAX(t1.shared_id) ,setas.name as setaName, providers.name as providerName")
            ->mergeBindings($subQuery)
            ->join('setas', 't1.seta_id', '=', 'setas.id')
            ->join('providers', 't1.provider_id', '=', 'providers.id')
            ->where('t1.shared_id', '=', 2)
            ->orWhere('t1.provider_id', '=', 1)
            ->groupBy('t1.code','t1.code','t1.id','t1.provider_id','t1.name', 't1.nqf_level', 't1.credits','t1.type','t1.shared_id', 't1.seta_id', 'setas.name', 'providers.name')
            ->havingRaw('COUNT(t1.code) >= 1')
            ->orderBy('t1.code', 'asc')
        ->paginate(50);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2021-05-28
    • 1970-01-01
    相关资源
    最近更新 更多