Level 88
Your mistake is in here
$join->on($join->on(\DB::raw('SUBSTRING(stores.ref_translation FROM 14 FOR 26)'),'=',\DB::raw('t.item')));
You call $join->on twice. and therefore you get this error message!
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
I was able to compile this query builder and run it on tinker like so:
\DB::table('stores')->selectRaw('stores.ref,t.text as ref_ar')->join(\DB::raw("(select item, text from translator_translations where locale ='ar' AND namespace ='*' AND item like 'store.ref%') as t"), function($join) { $join->on(\DB::raw('SUBSTRING(stores.ref_translation FROM 14 FOR 26)'),'=',\DB::raw('t.item')); })->get();
but when I adde the above to a scope like so:
public function scopeAddTranslation($query)
{
$query->addSelect(\DB::raw('translator_translations.text'))
->join(\DB::raw("(select item, text from translator_translations where locale ='ar' AND namespace ='*' AND item like 'store.ref%') as t"),
function($join) {
$join->on($join->on(\DB::raw('SUBSTRING(stores.ref_translation FROM 14 FOR 26)'),'=',\DB::raw('t.item')));
});
return $query;
}
it fails with this stack trace:
[2018-02-15 06:29:01] local.ERROR: ErrorException: strtolower() expects parameter 1 to be string, object given in /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Grammar.php:58 Stack trace:
0 /Users/Shared/dev/php/toters-api/vendor/sentry/sentry/lib/Raven/Breadcrumbs/ErrorHandler.php(34): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'strtolower() ex...', '/Users/Shared/d...', 58, Array)
1 [internal function]: Raven_Breadcrumbs_ErrorHandler->handleError(2, 'strtolower() ex...', '/Users/Shared/d...', 58, Array)
2 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Grammar.php(58): strtolower(Object(Illuminate\Database\Query\JoinClause))
3 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php(252): Illuminate\Database\Grammar->wrap(Object(Illuminate\Database\Query\JoinClause))
4 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php(180): Illuminate\Database\Query\Grammars\Grammar->whereColumn(Object(Illuminate\Database\Query\JoinClause), Array)
5 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php(150): Illuminate\Database\Query\Grammars\Grammar->compileWheres(Object(Illuminate\Database\Query\JoinClause))
6 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php(77): Illuminate\Database\Query\Grammars\Grammar->compileJoins(Object(Illuminate\Database\Query\Builder), Array)
7 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php(53): Illuminate\Database\Query\Grammars\Grammar->compileComponents(Object(Illuminate\Database\Query\Builder))
8 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(1581): Illuminate\Database\Query\Grammars\Grammar->compileSelect(Object(Illuminate\Database\Query\Builder))
9 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(1648): Illuminate\Database\Query\Builder->toSql()
Please or to participate in this conversation.