красноречивые отношения, получение собственности на не объект - PullRequest
0 голосов
/ 19 мая 2018

Так я создал свою базу данных (каждый сотрудник может иметь несколько названий):

CREATE TABLE employees (
    emp_no      INT             NOT NULL,
    birth_date  DATE            NOT NULL,
    first_name  VARCHAR(14)     NOT NULL,
    last_name   VARCHAR(16)     NOT NULL,
    gender      ENUM ('M','F')  NOT NULL,    
    hire_date   DATE            NOT NULL,
    PRIMARY KEY (emp_no)
);

CREATE TABLE titles (
    emp_no      INT             NOT NULL,
    title       VARCHAR(50)     NOT NULL,
    from_date   DATE            NOT NULL,
    to_date     DATE,
    FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE,
    PRIMARY KEY (emp_no,title, from_date)
); 

Это соответствующие модели:

class employee extends Model
{
    protected $primaryKey = 'emp_no'; 
    public $incrementing = false; 
    protected $connection = 'testMYSQL';

    public function title()
    {
        return $this->hasMany('App\title', 'emp_no');
    }
}

class title extends Model
{
    protected $primaryKey = ['emp_no', 'title', 'from_date'];
    public $incrementing = false;
    protected $connection = 'testMYSQL';
    public $timestamps = false;

    public function employee()
    {
        return $this->belongsTo('App\employee', 'emp_no');
    }
}

В моем контроллере я использовалмодели, которые я создал следующим образом:

return $employee = employee::find(1)->title;

Но я получаю эту ошибку для строки выше:

"Попытка получить свойство title для необъекта"

Обновление : хотя они работают нормально:

return $employee = employee::first()->title;
return $employee = title::first()->employee;

Я думаю, что отношения правильные, и проблема в том, что Laravel все еще не заметил, чтопервичный ключ - emp_no , а не id .Я изменил тип $ primaryKey с protected на public , но все равно получаю ту же ошибку.

1 Ответ

0 голосов
/ 19 мая 2018

Да, я думаю, что ошибка метода find, потому что пока я знаю, что метод find () работает только на Id (первичный ключ)

И ваша таблица имеет emp_no, поэтому

employee::find(1)->title;

Этот метод не работает и возникли следующие ошибки

"Trying to get property 'title' of non-object"
...