laravel 5.3: Неопределенное свойство: Ошибка Illuminate Database Eloquent Collection

#php #mysql #laravel-5 #laravel-5.3

#php #mysql #laravel-5 #laravel-5.3

Вопрос:

У меня есть одна таблица с именем doctor (staff_id, специализация), а другая таблица — staff (staff_id, пароль, имя, электронная почта, адрес, отдел, sub_department, должность), и в таблице doctor внешний ключ staff_id является ссылкой на staff_id атрибут таблицы staff. Я не знаю, почему я получил эту ошибку, я использую Laravel 5.3, пожалуйста, помогите мне.

вот моя «Модель персонала»

     namespace App;

    use IlluminateDatabaseEloquentModel;

    class Staff extends Model
    {
       protected $table = 'Staff';

       public function doctor(){
          return $this->hasOne('AppDoctor');   
       }
    }
  

вот моя «Модель доктора»

     namespace App;

    use IlluminateDatabaseEloquentModel;

    class Doctor extends Model
    {
       protected $table = 'Doctor';
       public function staff(){
           return $this->belongsTo('AppStaff');
       }
    }
  

Это контроллер

     use AppDoctor;

    use AppStaff;

    class PageController extends Controller
    {
        public function getIndex(){
           $doctor = Doctor::all();
           return view('pages.welcome')->withDoctor($doctor);
        }
   }
  

И это мое, welcome.blade.php где я его использую

  <pre>
   <tr>
    <td>{{ $doctor->staff->name }}</td>
   </tr>
 </pre>
  

и когда я запускаю его, я получаю эту ошибку:

Исключение ErrorException в 150a6b9d586ccbe6225ed748a7eb8dfc842ce323.php строка 26: Неопределенное свойство: IlluminateDatabaseEloquentCollection::$staff (Просмотр: C:wampwwwseresourcesviewspageswelcome.blade.php )

Ответ №1:

Попробуйте передать данные с вашего контроллера следующим образом:

 public function getIndex(){
    $doctor = Doctor::all();
    return view('pages.welcome')->with('doctor', $doctor);
}
  

Ответ №2:

 Your controller should be.
    use AppDoctor;

    use AppStaff;

    class PageController extends Controller
    {
        public function getIndex(){
           $doctor = Doctor::all();
           return view('pages.welcome',compact('doctor'));
   }
}

Your views should be-

 <pre>
@foreach($doctor as $doctors)
   <tr>
    <td>{{ $doctors->name }}</td>
   </tr>
@endforeach
 </pre>
  

Комментарии:

1. Я не хочу печатать таблицу персонала, я хочу напечатать таблицу персонала специализацию таблицы doctor, используя функцию, которая определена в Staff modal и Doctor modal. таким образом, я могу распечатать всю информацию для каждого идентификатора персонала, как и весь атрибут

Ответ №3:

спасибо вам, ребята, за вашу помощь, я наконец узнал, как решить эту ошибку, вот несколько моментов, которые могут вам помочь — 1. В модели мы должны сообщить модели первичный ключ, например, моя модель «STAFF» будет похожа на namespace App;

 use IlluminateDatabaseEloquentModel;

class Staff extends Model
{
   protected $primarykey = 'staff_id';
   protected $table = 'Staff';

   public function doctor(){
      return $this->hasOne('AppDoctor');   
   }
}
  

теперь мы можем вызывать первичный ключ по умолчанию как «id».

мы также должны изменить это для нашей модели «DOCTOR» namespace App;

 use IlluminateDatabaseEloquentModel;

class Doctor extends Model
{
   protected $primarykey = 'staff_id';
   protected $table = 'Doctor';
   public function staff(){
       return $this->belongsTo('AppStaff');
   }
}
  
  1. теперь наш контроллер должен быть похож

    используйте App Doctor;

    используйте App Staff;

    класс PageController расширяет контроллер { общедоступная функция getIndex(){ $doctor = Doctor::find(id); возвращает view(‘страницы.добро пожаловать’)-> с доктором ($doctor); } }

  2. теперь в моем welcome.blade.php должно быть похоже —

     
     {{ $doctor->staff->name }}
     
     

и это работает.

для получения дополнительной информации нажмите здесь