没有 laravel 的 Eloquent 选择行不起作用

Posted

技术标签:

【中文标题】没有 laravel 的 Eloquent 选择行不起作用【英文标题】:Eloquent without laravel selectRow is not wotking 【发布时间】:2019-12-18 02:24:11 【问题描述】:

我在 laravel 之外使用 eloquent。我已经在 compposer.json 中安装了照明/数据库。现在我创建了一个扩展 Illuminate\Database\Eloquent\Model 类的类。 现在我想使用 DB::row(),但出现错误

这是我的代码:

模型.php

namespace Framework;

use Helpers\Helper;
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Database\Eloquent\Model as BaseModel;

class Model extends BaseModel 
    public $Error = null;
    public $Connection = null;
    public $qry_builder = null;
    public $version;
    public $table_name;

    function __construct() 
        try
            parent::__construct();
            $capsule = new Capsule;
            $capsule->addConnection([
                'driver'    => DB_DRIVER,
                'host'      => DB_HOST,
                'database'  => DB_NAME,
                'username'  => DB_USER,
                'password'  => DB_PSSWD,
                'charset'   => 'utf8'
            ]);
            $capsule->setAsGlobal();
            $capsule->bootEloquent();
          catch (\Exception $ex)
            Helper::log()->log(LogLevel::ERROR, "Unable to connect DB", ["DB_NAME"=> DB_NAME,"HOST"=>DB_HOST,"DB_USER"=>DB_USER,"DB_PASSWORD"=>DB_PSSWD]);
        
    


BankMinMaxModel.php

namespace  Models;
use \Framework\Model;
use Helpers\Helper;
class BankMinMaxModel extends Model 
    protected $table = "tbl_pl_bank_min_max_new";
    protected $primaryKey = 'id';
    // protected $fillable = [];
    public $timestamps = false; 
    protected $guarded = [];
    public function get($where)
        $data = null;
        echo $data = self::orderBy("id", "DESC")->where($where)->selectRow("MIN(NULLIF(min_turnover,0)) as min_turnover")->toSql();
        exit;
        if($data)
            $data = $data->toArray();
        
        return $data;
    


控制器:

$loanMinMaxValues = (new BankMinMaxModel)->get([["occup_id", "=", 3]]);

错误

"调用未定义的方法 Illuminate\Database\Eloquent\Builder::selectRow()"

【问题讨论】:

你确定你不是指“selectRaw”而不是“selectRow”吗? (一个错字) 【参考方案1】:

selectRow() 在 Laravel 中不存在。应该是selectRaw()

查看 Laravel 文档中的原始表达式。

https://laravel.com/docs/5.8/queries#raw-expressions

DB::raw()

你可以像->select(\DB::raw('column_one, column_tow'))这样使用它

【讨论】:

感谢您的建议。我也可以使用 DB::raw 吗?请建议相同的代码 因为你可以

以上是关于没有 laravel 的 Eloquent 选择行不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 在 whereHas() 上进行选择

Laravel Eloquent/DB 选择每组前 1 行

从Laravel和Eloquent的桌子中选择所有

Laravel 中自动删除相关行(Eloquent ORM)

Laravel - Eloquent - 获得没有外键的关系

Laravel Eloquent,仅选择存在关系的行