Пытаетесь получить свойство datep для необъекта? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть две таблицы POINTAGES и СОТРУДНИКИ. Между ними есть отношение hasMany и serveTo. Я хочу отобразить таблицу POINTAGES из SalarieController, которая выдает ошибку. Попытка получить свойство datep для необъекта?1003 * потреблять.blade.php

<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>

SalarieController

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');
    }

Модель Pointage

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

Миграция salarie_id

public function up()
    {
        Schema::table('pointages', function (Blueprint $table) {
            $table->integer('salarie_id')->unsigned()->after('id');
            $table->foreign('salarie_id')->references('id')->on('salaries');  
        });
    }

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Причина, по которой вы получаете эту проблему, заключается в том, что вы использовали all(), который при использовании в коллекции будет возвращать массив (именно поэтому ошибка говорит non-object).

СледующийПроблема, с которой вы столкнетесь, заключается в том, что в ваших результатах не будет chantier, ouvrage, nbrj или solde, потому что вы используете pluck, который будет возвращать только одно значение из строкив вашей базе данных
( Pluck - прокрутите вниз до заголовка Получение списка значений столбцов ).

Чтобы обойти обе эти проблемы, вам просто нужно изменить ->pluck("datep","id")->all() на get().

Это будет означать, что ваш метод контроллера будет выглядеть примерно так:

public function consulter()
{
  $salaries = Salarie::with('pointages')->get();
  $pointages = DB::table('pointages')->get();

  return view('salarie.consulter', compact('salaries','pointages'));
}

В качестве альтернативы, если вы хотите использовать Eloquent, вы можете изменить строку $pointages на:

$pointages = Pointage::all(); 

(не забудьте импортировать модель в ваш контроллер).

1 голос
/ 08 июля 2019

Метод pluck() вернет массив ваших идентификаторов, извлеченных в значения datep. Таким образом, вы не можете получить доступ к значению $pointage->datep. Также вы не можете получить доступ к другим свойствам, таким как chantier, ouvrage ... когда вы используете pluck(). Просто избавьтесь от метода pluck и итерируйте коллекцию, заданную all(), и получите доступ к значениям из модели. Вы можете сделать Pointage:all() при использовании вашей модели или DB::table('pointages')->get(); при использовании QueryBuilder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...