使用 RAW Eloquent 查询和 Slim PHP
Use RAW Eloquent Queries with Slim PHP
我正在使用 SlimPHP 和 Eloquent 开发一个项目。
我正在尝试 运行 模型方法中的 RAW SQL 查询,如下所示:
/models/Form.php
<?php
namespace models;
class Form extends \Illuminate\Database\Eloquent\Model {
protected $table = 'forms';
public function getResponses($form_id)
{
// HERE
$select = \Illuminate\Support\Facades\DB::select('select 1');
return 1;
}
}
我正在使用 Capsule bootstrap ORM。
上面的代码给我:
Fatal error: Call to a member function select() on a non-object in
/vagrant/vendor/illuminate/support/Illuminate/Support/Facades/Facade.php
on line 208
文档在这种情况下非常有帮助,您能对此说明一下吗?
谢谢
仔细阅读 setup instructions on github 并确保正确遵循。
对于 Capsule,您应该使用 Illuminate\Database\Capsule\Manager
或 DB
"Facade"。
$select = \Illuminate\Database\Capsule\Manager::select('select 1');
我一般导入并定义别名:
use Illuminate\Database\Capsule\Manager as DB;
// ...
$select = DB::select('select 1');
此外,如果您需要进行原始查询,在 bootEloquent() 之后调用 setAsGlobal() 可能会有所帮助,就像这样
$capsule->addConnection($sqliteDb);
$capsule->bootEloquent();
$capsule->setAsGlobal(); // <--- this
在 Slim 4 中,
我们可以使用 $this->getConnection()->select($sql);
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model{
protected $table = 'products';
public $timestamps = false;
protected $fillable = ["name", "price", "quantity", "supplier", "image", "category"];
public function getProductsByCategory(){
$sql = 'SELECT p.id,
p.name,
p.price,
p.quantity,
p.supplier,
p.image,
p.category,
(SELECT IF(COUNT(*) >= 1, TRUE, FALSE) FROM favorite f WHERE f.user_id = 1 AND f.product_id = p.id) AS isFavourite,
(SELECT IF(COUNT(*) >= 1, TRUE, FALSE) FROM carts c WHERE c.user_id = 1 AND c.product_id = p.id) AS isInCart
FROM products p';
return $this->getConnection()->select($sql);
}
}
我正在使用 SlimPHP 和 Eloquent 开发一个项目。 我正在尝试 运行 模型方法中的 RAW SQL 查询,如下所示:
/models/Form.php
<?php
namespace models;
class Form extends \Illuminate\Database\Eloquent\Model {
protected $table = 'forms';
public function getResponses($form_id)
{
// HERE
$select = \Illuminate\Support\Facades\DB::select('select 1');
return 1;
}
}
我正在使用 Capsule bootstrap ORM。
上面的代码给我:
Fatal error: Call to a member function select() on a non-object in /vagrant/vendor/illuminate/support/Illuminate/Support/Facades/Facade.php on line 208
文档在这种情况下非常有帮助,您能对此说明一下吗?
谢谢
仔细阅读 setup instructions on github 并确保正确遵循。
对于 Capsule,您应该使用 Illuminate\Database\Capsule\Manager
或 DB
"Facade"。
$select = \Illuminate\Database\Capsule\Manager::select('select 1');
我一般导入并定义别名:
use Illuminate\Database\Capsule\Manager as DB;
// ...
$select = DB::select('select 1');
此外,如果您需要进行原始查询,在 bootEloquent() 之后调用 setAsGlobal() 可能会有所帮助,就像这样
$capsule->addConnection($sqliteDb);
$capsule->bootEloquent();
$capsule->setAsGlobal(); // <--- this
在 Slim 4 中, 我们可以使用 $this->getConnection()->select($sql);
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model{
protected $table = 'products';
public $timestamps = false;
protected $fillable = ["name", "price", "quantity", "supplier", "image", "category"];
public function getProductsByCategory(){
$sql = 'SELECT p.id,
p.name,
p.price,
p.quantity,
p.supplier,
p.image,
p.category,
(SELECT IF(COUNT(*) >= 1, TRUE, FALSE) FROM favorite f WHERE f.user_id = 1 AND f.product_id = p.id) AS isFavourite,
(SELECT IF(COUNT(*) >= 1, TRUE, FALSE) FROM carts c WHERE c.user_id = 1 AND c.product_id = p.id) AS isInCart
FROM products p';
return $this->getConnection()->select($sql);
}
}