【问题标题】:Laravel 5 Eloquent model errorLaravel 5 Eloquent 模型错误
【发布时间】:2017-09-02 00:49:03
【问题描述】:

我在尝试连接多个模型时遇到了 Eloquent 模型的错误:

Builder.php 第 2450 行中的 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::adminis()

这些是我的模型:

 <?php

    namespace App\Modelos;

    use Illuminate\Database\Eloquent\Model;

    class srh_inf_persona extends Model
    {
        protected $table = 'srh_inf_personas';

        protected $primaryKey = ['infp_cedula'];

        public function adminis()
        {
            return $this->hasMany('App\Modelos\srh_infa_admini');
        }
    }

use Illuminate\Database\Eloquent\Model;

class srh_inf_admini extends Model
{
    protected $table = 'srh_inf_adminis';
    public $timestamps = 'false';

    protected $primaryKey = ['infa_cedula'];

    public function persona()
    {
        return $this->belongsTo('App\Modelos\srh_inf_persona');
    }
}

这是我的控制器查询:

<?php

namespace App\Http\Controllers\Controladores;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Modelos\srh_inf_persona; // Llamado del modelo SRH_INF_PERSONA
use App\Modelos\srh_inf_admini; // Llamado del modelo SRH_INF_PERSONA

class SolicitudController extends Controller
{
    // Consulta para generar la solicitud de permisos
    public function nuevasolicitud($ced)
    {       
        $consulta = srh_inf_persona::select('infp_cedula')->adminis()
        ->where('infp_cedula',$ced)
        ->first();

        return view('permisos.solicitud',[ 'personas' => $consulta ]);
    }

}

知道问题是什么吗? 非常感谢。

【问题讨论】:

    标签: php laravel model eloquent


    【解决方案1】:

    变化:

       $consulta = srh_inf_persona::select('infp_cedula')->adminis()
        ->where('infp_cedula',$ced)
        ->first();
    

    到:

       $consulta = srh_inf_persona::select('infp_cedula')
        ->where('infp_cedula',$ced)
        ->first()->adminis();
    

    这将解决您的错误,因为您是延迟加载。 当你这样做时,你需要在一个 eloquent 模型的实例而不是构建器上调用它。

    如果你想预先加载它,那么你可以这样做:

       $consulta = srh_inf_persona::select('infp_cedula')
        ->where('infp_cedula',$ced)
        ->with(['adminis'])
        ->first();
    

    【讨论】:

    • $consulta = srh_inf_persona::select('infp_cedula') -&gt;where('infp_cedula',$ced) -&gt;with(['adminis']) -&gt;first(); 这个很有魅力,谢谢。
    猜你喜欢
    • 2015-03-12
    • 2017-09-13
    • 2016-08-17
    • 2019-02-13
    • 2015-12-09
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    相关资源
    最近更新 更多