Как запросить ключ настройки в Laravel? - PullRequest
2 голосов
/ 20 октября 2019

С учетом этих таблиц: person и employee, к которым подключен человек person_id. Этот person_id также является первичным и внешним ключом таблицы employee. Таким образом, в моих миграциях у меня есть это:

Schema::create('employees', function (Blueprint $table) {
    $table->bigIncrements('person_id');
    $table->foreign('person_id')->references('id')->on('persons')->onDelete('cascade');
});

, и мой show метод похож на этот

public function show(Employee $employee){
    dd($employee->person_id);
    $employee = Employee::where('person_id', $employee->person_id)->orderBy('employee_number', 'asc')->join('persons', 'employees.person_id', '=', 'persons.id')->first();
    return view('employee.show', compact('employee'));
}

Но я испытываю эту проблему:

Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select * from `employees` where `id` = 5 limit 1)

Не знает ли запрос о столбце, который я использую?

1 Ответ

3 голосов
/ 20 октября 2019

Изменение первичного ключа в модели Employee

class Employee extends Model
{
    /**
     * The primary key associated with the table.
     *
     * @var string
     */
    protected $primaryKey = 'person_id';

    public function person()
    {
        return $this->belongsTo('App\Employee', 'person_id', 'person_id');
    }
}

Затем запрос с использованием find

Employee::find($employee->person_id)->with('person')->first();

orderBy и first избыточен для одного результата запросов

И если вы хотите вернуть Employee с Person, просто получите доступ к объекту взаимосвязи (сотрудник возвращается из привязки модели маршрута)

public function show(Employee $employee) {
    $person = $employee->person;
    return view('employee.show', compact('employee', 'person'));
}

Надеюсь, это поможет

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