РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
110 of 1392 menu

nullableMorphs

Метод nullableMorphs применяется внутри схемы миграции для создания двух полей: идентификатора модели и её типа. Первым параметром передаётся префикс для имён колонок, вторым необязательным параметром - имя индекса. В отличие от метода morphs, поля, создаваемые через nullableMorphs, позволяют хранить значение NULL, что полезно, когда связь с моделью не является обязательной.

Синтаксис

<?php Schema::table('table_name', function (Blueprint $table) { $table->nullableMorphs($prefix); }); ?>

Пример

Давайте создадим таблицу 'comments' с полями для полиморфной связи, которые могут быть пустыми:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->string('content'); $table->nullableMorphs('commentable'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('comments'); } }; ?>

Результат выполнения миграции:

"Table comments created with columns: id, content, commentable_id, commentable_type, created_at, updated_at"

Пример

Давайте добавим поля для полиморфной связи в уже существующую таблицу 'posts':

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::table('posts', function (Blueprint $table) { $table->nullableMorphs('author'); }); } public function down(): void { Schema::table('posts', function (Blueprint $table) { $table->dropMorphs('author'); }); } }; ?>

Результат выполнения миграции:

"Columns author_id and author_type added to posts table with nullable constraint"

Пример

Давайте создадим модель и используем полиморфную связь с возможностью NULL-значений:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphTo; class Comment extends Model { protected $fillable = ['content', 'commentable_id', 'commentable_type']; public function commentable(): MorphTo { return $this->morphTo(); } } ?>

Давайте создадим комментарий без привязки к какой-либо модели:

<?php namespace App\Http\Controllers; use App\Models\Comment; class CommentController extends Controller { public function store() { $comment = new Comment(); $comment->content = 'This is a comment without parent model'; $comment->commentable_id = null; $comment->commentable_type = null; $comment->save(); echo $comment->id; } } ?>

Результат выполнения кода:

"1"

Давайте создадим комментарий, привязанный к статье:

<?php namespace App\Http\Controllers; use App\Models\Comment; use App\Models\Article; class CommentController extends Controller { public function storeWithArticle() { $article = Article::find(1); $comment = new Comment(); $comment->content = 'This comment belongs to article'; $comment->commentable()->associate($article); $comment->save(); echo $comment->id; } } ?>

Результат выполнения кода:

"2"

Смотрите также

  • метод morphs,
    который создаёт обязательные поля для полиморфной связи
  • метод uuidMorphs,
    который создаёт поля для полиморфной связи с UUID
  • метод morphTo,
    который определяет обратную полиморфную связь в модели
  • метод nullable,
    который делает отдельное поле допускающим NULL
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить