试图获取非对象的属性“ datep”?

时间:2019-07-08 16:17:42

标签: laravel

我有两个表POINTAGES和EMPLOYEES,它们之间是一个hasMany和belongsTo关系,我想从中显示表POINTAGES SalarieController给我一个错误,试图获取非对象?的属性“ datep”。

consule.blade.php

onRowClick

SalarieController

<table id="example" class="table table-striped table-bordered">
        <thead>
                  <tr>
                    <th>date</th>
                    <th>chantier</th>
                    <th>ouvrage</th>
                    <th>nombre jour</th>
                    <th>solde</th>
                    <th></th>
                  </tr>
                </thead>
                <tbody>
                  @foreach($pointages as $pointage)
                  <tr>
                    <td>{{ $pointage->datep }}</td>
                    <td>{{ $pointage->chantier }}</td>
                    <td>{{ $pointage->ouvrage }}</td>
                    <td>{{ $pointage->nbrj }}</td>
                    <td>{{ $pointage->solde }}</td>
                    <td></td>

                  </tr>
                  @endforeach
                </tbody>
</table>

路线

public function consulter()
     {

      $salaries = Salarie::with('pointages')->get();
      $pointages = DB::table('pointages')->pluck("datep","id")->all();
      return view('salarie.consulter', compact('salaries','pointages'));
    }

萨拉利模范

Route::get('consulter', 'SalarieController@consulter');

模型指针

public function pointages(){
        return $this->hasMany('App\Pointage');
    }

移民salarie_id

/**
     * 
     *
     * @var array
     */
    protected $fillable = [
        'salarie_id', 'datep', 'solde', 'nbrj' , 'ouvrage' , 'chantier' , 'prime' ,
    ];
    public function salarie(){
        return $this->belongsTo('App\Salarie');
    }

2 个答案:

答案 0 :(得分:1)

方法pluck()将把您的ID的数组返回给datep值。因此,您无法通过$pointage->datep访问该值。另外,使用pluck()时,您无法访问chantier,ouvrage ...等其他属性。只需摆脱pluck方法并遍历all()给定的集合并访问模型中的值即可。 您可以在使用模型时进行Pointage:all()或在使用QueryBuilder时进行DB::table('pointages')->get();

答案 1 :(得分:1)

出现此问题的原因是因为您使用了all(),该non-object在集合中使用时会返回一个数组(这就是为什么错误显示chantier的原因)。

您要面对的下一个问题是您的结果中不会包含ouvragenbrjsoldepluck,因为您正在使用->pluck("datep","id")->all()只会从您数据库中的一行返回单个值
({Pluck-向下滚动至标题正在检索列值列表))。

要解决这两个问题,您只需将get()更改为public function consulter() { $salaries = Salarie::with('pointages')->get(); $pointages = DB::table('pointages')->get(); return view('salarie.consulter', compact('salaries','pointages')); }

这意味着您的控制器方法将类似于:

$pointages

或者,如果您想使用Eloquent,则可以将$pointages = Pointage::all(); 行更改为:

|

(不要忘记将模型导入到您的控制器中)。