Я не думаю, что вы можете объявить уникальное ограничение таким образом.Вы можете упростить свою таблицу, сохранив столбец type
, но используя одно поле с целью code
или logo
.Вы можете назвать это поле value
, например.Затем вы можете добавить уникальное ограничение к type
и value
, например:
Schema::create('items', function (Blueprint $table) {
// Your fields here...
$table->unique(['type', 'value']);
});
. Для удобства вы всегда можете добавить средства доступа в вашу модель для доступа к code
или image
, как если бы они былиполя, например:
class Item extends Model
{
public function getCodeAttribute()
{
return $this->type === 'text' ? $this->value : null;
}
public function getImageAttribute()
{
return $this->type === 'logo' ? $this->value : null;
}
}
Это позволит вам получить доступ к code
и image
, как если бы они были полями, и ваша модель вернет либо value
, либо null
в зависимости от типавашего Item
.
$text = new Item(['type' => 'text', 'value' => 'Hello World!']);
echo $text->code; // Hello World!
echo $text->image; // null
$logo = new Item(['type' => 'logo', 'value' => 'your-image.jpg']);
echo $text->code; // null
echo $text->image; // your-image.jpg