Как объявить составной первичный ключ в модели Lumen? - PullRequest
1 голос
/ 09 мая 2019

У меня есть таблица с тремя первичными ключами, я пытаюсь создать модель для нее, и я хотел бы использовать функцию find (), но она выдает ошибку:

Код:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Visit extends Model
{
  protected $table = 'ft_visit';

  protected $primaryKey = ['sk_time', 'sk_region', 'sk_device'];

  protected $fillable = [
      'sk_time', 'sk_region', 'sk_device', 'ds_page',
  ];

  public $timestamps = false;

  public function time()
  {
    return $this->belongsTo(Time::class, 'sk_time');
  }
}

Ошибка:

(1/1) ErrorException
mb_strpos() expects parameter 1 to be string, array given

Ответы [ 3 ]

2 голосов
/ 09 мая 2019

Вы можете попробовать решение, представленное в этой статье Решено: Eloquent не поддерживает составные первичные ключи.

Добавив метод setKeysForSaveQuery, приведенный ниже, к вашей модели и удалив атрибут $primaryKey, вы можете добавить эту не поддерживаемую функцию в вашу модель Eloquent.

<?php

use Illuminate\Database\Eloquent\Builder;

class Visit extends Model {

    public $incrementing = false;

    protected function setKeysForSaveQuery(Builder $query)
    {
        $query
            ->where('sk_time', '=', $this->getAttribute('sk_time'))
            ->where('sk_region', '=', $this->getAttribute('sk_region'));
            ->where('sk_device', '=', $this->getAttribute('sk_device'));

        return $query;
    }

}

РЕДАКТИРОВАТЬ: Как отметил @Devon, это может повлиять на Eloquent другими способами и должно быть тщательно проверено перед использованием. Однако это должно дать вам некоторое разрешение на его решение, если вы не находитесь в положении, когда вы можете (предпочтительно) реструктурировать приложение или данные.

0 голосов
/ 09 мая 2019

Eloquent не поддерживает составные ключи. В этом сценарии лучше всего обеспечить совместимость Eloquent с помощью преобразования существующего первичного составного ключа в уникальный составной ключ и добавления первичного ключа (id) с автоинкрементом для использования в Eloquent.

0 голосов
/ 09 мая 2019

К сожалению, вы не можете. Laravel и lumen (с использованием Eloquent) не поддерживают составные ключи.

...