【问题标题】:Laravel 5 Call to undefined method Illuminate\Database\Query\Builder::muestras()Laravel 5 调用未定义的方法 Illuminate\Database\Query\Builder::muestras()
【发布时间】:2017-10-04 19:31:09
【问题描述】:

我正在使用 Laravel 5.1: 我有一个名为 Muestra 的模型,它有 4 个与 Ganado、TipoMuestra、TipoConsulta 和 Laboratorio 一对多的外键/关系。当我从表单在guardarNueva() 中创建一个名为$muestra 的Muestra 元素并调用$muestra->setTipoConsulta/Laboratorio/TipoMuestra() 时,问题就出现了,它调用函数并抛出错误:

BadMethodCallException in Builder.php line 2123:
Call to undefined method 
Illuminate\Database\Query\Builder::muestras()
in Builder.php line 2123
at Builder->__call('muestras', array())
at call_user_func_array(array(object(Builder), 'muestras'), array()) 
in Builder.php line 1015
at Builder->__call('muestras', array())
at call_user_func_array(array(object(Builder), 'muestras'), array()) 
in Model.php line 3444
at Model->__call('muestras', array()) in Muestra.php line 51
at Muestra->setTipoConsulta(object(TipoConsulta)) in Muestra.php line 65
at Muestra::guardarNueva(object(Request)) in MuestrasController.php line 48

Muestra 型号代码为:

class Muestra extends Model
{
protected $fillable = ['tubo'];
protected $dates = ['fecha_extraccion'];

public function ganado()
{
    return $this->belongsTo(Ganado::class);
}

public function tipo_muestra()
{
    return $this->belongsTo(TipoMuestra::class);
}

public function tipo_consulta()
{
    return $this->belongsTo(TipoConsulta::class);
}

public function laboratorio()
{
    return $this->belongsTo(Laboratorio::class);
}

public function setFechaExtraccion($date)
{
    $this->fecha_extraccion = $date;
    $this->save();
    return $this->fecha_extraccion;
}

public function setLaboratorio($laboratorio){
    return $laboratorio->muestras()->save($this);

}

public function setTipoMuestra($tipomuestra){
    return $tipomuestra->muestras()->save($this);

}

public function setTipoConsulta($tipoconsulta){
    return $tipoconsulta->muestras()->save($this);

}
public function setGanado($ganado){
    return $ganado->muestra()->save($this);

}

public static function guardarNueva($request){
    $datos = $request->except(['tipo_muestra_id','tipo_consulta_id','laboratorio_id','ganado_id','fecha_extraccion']);
    $muestra=self::create($datos);
    $muestra->setFechaExtraccion($request->input('fecha_extraccion'));
    $muestra->setGanado(Ganado::find($request->input('ganado_id')));
    $muestra->setLaboratorio(Laboratorio::find($request->input('laboratorio_id')));
    $muestra->setTipoConsulta(TipoConsulta::find($request->input('tipo_consulta_id')));
    $muestra->setTipoMuestra(TipoMuestra::find($request->input('tipo_muestra_id')));
    return $muestra;

}

}

Muestra 的迁移是:

class CreateMuestrasTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('muestras', function (Blueprint $table) {
        $table->increments('id');
        $table->string('tubo')->unique();
        $table->date('fecha_extraccion');
        $table->integer('ganado_id');
        $table->integer('tipo_muestra_id');
        $table->integer('tipo_consulta_id');
        $table->integer('laboratorio_id');
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('muestras');
}
}

其他任何失败的模型,例如 TipoMuestra 都是这样的:

class TipoConsulta extends Model
{
//
protected $fillable=['nombre'];

protected function muestras(){
    return $this->hasMany(Muestra::class);
}


public function getSelectOptionAttribute(){
    return $this->attributes['nombre'];
}
}

【问题讨论】:

    标签: php database laravel web laravel-5.1


    【解决方案1】:

    只是一个愚蠢的错误,将 muestras() 方法从受保护更改为公共工作!

    public function muestras() {
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2014-04-25
      • 2017-02-20
      相关资源
      最近更新 更多