I want to add global custom queries using the DB
facade:
\DB::table('users')->myCustomQuery()->get();
I tried it by manipulating the DatabaseServiceProvider
as explained in Add scope queries to database query builder? but I could not make it work.
Thus, I tried to create this helper class to add custom queries:
<?php
namespace App\Utilities;
use DB;
class CustomDB
{
private $db;
private static $instance = null;
private $exitCalls;
private function __construct()
{
$this->exitCalls = ['get', 'find', 'pluck', 'first', 'value', 'chunk', 'chunkById', 'count', 'max', 'avg', 'exists', 'doesntExist'];
}
public function __call($name, $arguments)
{
$result = call_user_func_array([self::$instance->db, $name], $arguments);
if (in_array($name, $this->exitCalls)) {
return $result;
}
return self::$instance;
}
public static function table($string)
{
if (self::$instance == null) {
self::$instance = new CustomDB();
}
self::$instance->db = DB::table($string);
return self::$instance;
}
public function myCustomQuery()
{
self::$instance->db->where('name','=','frank');
return self::$instance;
}
}
Now
CustomDB::table('users')->myCustumQuery()->get();
works!
But something like
CustomDB::table('users')->where(function($query){
$query->myCustomQuery();
})->get();
Does not work. That is because where(...)
is called on self::$instance->db
(which is an instance of Ilumminate/Database/DatabaseManager
and thus $query->myCustomQuery()
is called on the DatabaseManager and not my helper class, thus he does not know the method myCustomQuery
.
Any idea how to make this helper class work for recursive queries?
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire