ラーラヴエルの最初の雄弁な関係


ep24@Laracastsあなたの最初の雄弁な関係
このポストはシリーズの一部です.
私たちの次の目標は、私たちのブログの記事にカテゴリを割り当てることですBlog Project . 私たちはブログのアーカイブ上のカテゴリ名とポストタイトルの下の単一のポストページを表示します.
私たちは既にposts 我々のポストのためのテーブル.今、私たちはカテゴリーの別のテーブルが必要になります.つのテーブル間の関係を作ることができます.各エントリには、割り当てられたカテゴリIDがあります.
それで、我々は移動とモデルを生成する必要がありますCategory . つの別々のコマンドでそれらを生成できます
php artisan make:model Category
php artisan make:migration categories
または1つのコマンドで
php artisan make:model Category -m
ここで-m コマンドのフラグはモデルと一緒に移動するためのものです.
フィールドを追加するtitle and slug カテゴリマイグレーションのカテゴリスキーマに.を追加し、category_id 外部キー$table->foreignId("category_id");posts 移行移動を実行するphp artisan migrate:fresh . ブートアップティンカーphp artisan tinker そして、あなたのcategories 表.
use App\Models\Category;

$c = new Category;
$c->title = "Personal";
$c->slug = "personal";
$c->save();
他の2つのカテゴリの上記のコマンドを繰り返しますWork and Hobbies .
空の配列を$guarded 我々の財産Post モデルを使用して投稿を作成できますMass Assignment .
use App\Models\Post;

$post = new Post;
$post->create(["title" => "Just a personal post", "slug" => "just-a-personal-post", "excerpt" => "lorem ipsum is simply....", "body" => "Lorem ipsum is simply a dummy text...", "category_id" => 1]);
同様に、Work and Hobbies それぞれのカテゴリーIDを割り当てることによるカテゴリー.
私たちはすべてのポストにカテゴリーIDを割り当てました$post->category ? nope、まだ、我々は我々に我々の雄弁な関係を加えなかったのでPost モデルまだ.The $post->categorynull 代わりに.
Post モデル、メソッドを追加category() と適切な関係を返します.
public function category() {
        return $this->belongsTo(Category::class);
}
我々はbelongsTo() 私たちの場合、カテゴリには多くの投稿がありますが、投稿は1つのカテゴリに割り当てられます.

関連するモデルにアクセスする方法?
今私たちはCategory 関係Post モデル、それは時間のアクセスのポストの関連カテゴリです.ここの潜在的混乱は、方法として関連モデルにアクセスしようとしているかもしれません$post->category() , を返します.Illuminate\Database\Eloquent\Relations\BelongsTo {#4351} モデルインスタンスの代わりにApp\Models\Category . したがって、メソッドの代わりにプロパティとしてアクセスします.
use App\Models\Post;

$post = Post::first();
$post->category;
そして、それはカテゴリーモデルインスタンスを返します
>>> $post->category;
=> App\Models\Category {#3560
     id: 1,
     title: "Personal",
     slug: "personal",
     created_at: "2021-12-15 16:44:33",
     updated_at: "2021-12-15 16:44:33",
   }
>>>
これで関連カテゴリーのタイトルにアクセスできます$post->category->title 返り値Personal 上記の場合.
あなたのブレードの更新は、各投稿タイトルの下に関連するカテゴリを表示するテンプレート.
<p><a href="#">{{ $post->category->title }}</a></p>
ここでは、私たちはN+1 別のエピソードで話し合う問題.今すぐあなたのブログのリストページを参照してくださいとしての記事の下にカテゴリが表示されます

ブログプロジェクトのすべての変更を見るには、Githubコミットを参照してくださいEp#24 Your First Eloquent Relationship
.