hasMany关系返回Undefined属性

时间:2018-10-17 18:16:30

标签: laravel

我喜欢使用MovimentoProdutoUnidade函数列出movimento_id = 3的所有hasMany

我的模特Movimento

use Illuminate\Database\Eloquent\Model;
use App\Unidade;

class Movimento extends Model
{
    protected $fillable = [
    "movimento", "descricao", "requisitante", "despachante", "data", "unidade_ori_id", "unidade_des_id"
    ];
    protected $table = "movimentos";

    public function movimentoProdutoUnidade(){
        return $this->hasMany('App\MovimentoProdutoUnidade', 'movimento_id');
    }
}

我的模特MovimentoProdutoUnidade

use Illuminate\Database\Eloquent\Model;
use App\Movimento;

class MovimentoProdutoUnidade extends Model
{
    protected $fillable = [
        "movimento_id", "unidadeProduto_id"
    ];
    protected $table = "movimento_produtounidades";

    public function movimento(){
        return $this->belongsTo('App\Movimento', 'movimento_id');
    }
}

我的控制器:

public function licitacao(Request $request){
    $movimentos = Movimento::where('unidade_ori_id', 3)->movimentoProdutoUnidade;

    dd($movimentos);

    //return view('relatorios.licitacao', compact('movimentos'));
}

dd函数返回

  

未定义的属性:Illuminate \ Database \ Eloquent \ Builder :: $ movimentoProdutoUnidade

2 个答案:

答案 0 :(得分:2)

您的错误是因为您没有在查询生成器对象上调用first(),所以您有一个Builder(没有$movimentoProdutoUnidade属性的实例)而不是一个实例。 Movimento模型:

$movimento = Movimento::where('unidade_ori_id', 3)->first();
$movimento_produto_unidade = $movimento->movimentoProdutoUnidade;

但是,如果您想全部使用MovimentoProdutoUnidade,请尝试“向后思考”:

$movimento_produto_unidade = MovimentoProdutoUnidade::whereHas('movimento', function ($query) {
  return $query->where('unidade_ori_id', 3);
})
->get();

答案 1 :(得分:2)

如我的评论所述,请尝试使用first函数,如下所示:

Movimento::where('unidade_ori_id', 3)->first()->movimentoProdutoUnidade;

请始终在条件后使用get()first()find()函数从数据库中提取数据。

看看这个link