#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');
}
}
-
теперь наш контроллер должен быть похож
используйте App Doctor;
используйте App Staff;
класс PageController расширяет контроллер { общедоступная функция getIndex(){ $doctor = Doctor::find(id); возвращает view(‘страницы.добро пожаловать’)-> с доктором ($doctor); } }
-
теперь в моем welcome.blade.php должно быть похоже —
{{ $doctor->staff->name }}
и это работает.