目次
Laravel 5框架学习之Eloquent 关系,laraveleloquent
ホームページ php教程 php手册 Laravel 5框架学习之Eloquent 关系,laraveleloquent

Laravel 5框架学习之Eloquent 关系,laraveleloquent

Jun 13, 2016 am 09:07 AM
eloquent

Laravel 5框架学习之Eloquent 关系,laraveleloquent

一个用户可能有多个文章,一个文章是某个用户书写的,这就是关系。同样文章中可能包含多个 TAG,而一个 TAG 可能关联多个文章。

在项目中,我们已经有了 User.php,也就是用户模型,查看一下,相当简单。我们希望直接使用 $user->articles() 的形式获取全部文章,让我们修改 user 模型:

  public function articles() {
    return $this->hasMany('App\Article');
  }
ログイン後にコピー

但是我们仅仅完成了关系中的一端,让我们来处理另一端。我们希望的形式是 $article->user() ,让我们修改 article 模型。

  public function user() {
    return $this->belongsTo('App\User');
  }
ログイン後にコピー

在我们的数据库中,文章模型没有用户的外键,我们需要设置,修改 create_article_table.php

 Schema::create('articles', function(Blueprint $table)
 {
  $table->increments('id');
      //指定外键列
      $table->integer('user_id')->unsigned();
      $table->string('title');
      $table->text('body');
      $table->timestamp('published_at');
  $table->timestamps();

      //生成外键
      $table->foreign('user_id')
        ->references('id')
        ->on('users')
        ->onDelete('cascade');
 });

ログイン後にコピー

因为我们只是在开发阶段,还没有上线运行,我们可以直接修改数据库迁移文件,回滚然后迁移即可,但是如果上线运行的话,应该新建一个迁移。

php artisan migrate:refresh

#输出信息
Rolled back: 2015_03_28_050138_create_article_table
Rolled back: 2014_10_12_100000_create_password_resets_table
Rolled back: 2014_10_12_000000_create_users_table
Nothing to rollback.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrated: 2015_03_28_050138_create_article_table
Migrated: 2015_03_28_051200_add_excerpt_to_articels_table

ログイン後にコピー

现在让我们使用 tinker 来创建一个用户。

php artisan tinker
Psy Shell v0.4.1 (PHP 5.4.16 — cli) by Justin Hileman

#下面是执行过程
>>> $user = new App\User;
=> <App\User #000000007f1ad61a000000006497cc4f> {}
>>> $user->name = 'zhang jinglin';
=> "zhang jinglin"
>>> $user->email = 'zjl@example.com';
=> "zjl@example.com"
>>> $user->password = bcrypt('pass');
=> "$2y$10$Nbl2b9wqd.rXqKEsd3pRSOoIyFAFIhbqf71BufwDfS3Guv21SlEx2"
>>> $user->save();
=> true
>>> App\User::first()->toArray();
=> [
    "id"     => "1",
    "name"    => "zhang jinglin",
    "email"   => "zjl@example.com",
    "created_at" => "2015-03-31 03:24:55",
    "updated_at" => "2015-03-31 03:24:55"
  ]
>>> 

ログイン後にコピー

现在我们需要新发布的文章和用户关联,我们暂时先修改 form_partial.blade.php 来隐藏一个用户id,只是暂时:

复制代码 代码如下:
{{--临时处理--}}
{!! Form::hidden('user_id', 1) !!}

同时要修改模型的 $fillabel 属性,以便我们的 Mass Assisment。

 protected $fillable = [
    'title',
    'body',
    'published_at',
    'user_id' //临时设置
  ];
ログイン後にコピー

OK,添加一个文章。我们使用 tinker 来查看一下。

php artisan tinker
Psy Shell v0.4.1 (PHP 5.4.16 — cli) by Justin Hileman
>>> App\Article::first()->toArray();
=> [
    "id"      => "1",
    "user_id"   => "1",
    "title"    => "User 1 Article",
    "body"     => "User 1 Body",
    "published_at" => "2015-03-31 08:00:00",
    "created_at"  => "2015-03-31 04:17:58",
    "updated_at"  => "2015-03-31 04:17:58",
    "excerpt"   => null
  ]

#获取用户
>>> $user = App\User::first();
=> <App\User #0000000051cbb9d70000000073e11a3e> {
    id: "1",
    name: "zhang jinglin",
    email: "zjl@example.com",
    created_at: "2015-03-31 03:24:55",
    updated_at: "2015-03-31 03:24:55"
  }

#获取用户文章
>>> $user->articles()->toArray();
BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::toArray()'
>>> $user->articles->toArray();
=> [
    [
      "id"      => "1",
      "user_id"   => "1",
      "title"    => "User 1 Article",
      "body"     => "User 1 Body",
      "published_at" => "2015-03-31 08:00:00",
      "created_at"  => "2015-03-31 04:17:58",
      "updated_at"  => "2015-03-31 04:17:58",
      "excerpt"   => null
    ]
  ]
  
#为什么使用 $user->articles 而不是 #user->articles()&#63;
#事实上,$user->articles()返回的是关系,如果你想用 articles() 你需要这样用
>>> $user->articles()->get()->toArray();
=> [
    [
      "id"      => "1",
      "user_id"   => "1",
      "title"    => "User 1 Article",
      "body"     => "User 1 Body",
      "published_at" => "2015-03-31 08:00:00",
      "created_at"  => "2015-03-31 04:17:58",
      "updated_at"  => "2015-03-31 04:17:58",
      "excerpt"   => null
    ]
  ]
  
#你只能使用 articles() 来进行下一步的工作,比如下面的查询

$user->articles()->where('title', 'User 1 Article')->get();

#我们也可以通过 article 获取 user

>>> $article = App\Article::first();
=> <App\Article #0000000051cbb9d60000000073e11a3e> {
    id: "1",
    user_id: "1",
    title: "User 1 Article",
    body: "User 1 Body",
    published_at: "2015-03-31 08:00:00",
    created_at: "2015-03-31 04:17:58",
    updated_at: "2015-03-31 04:17:58",
    excerpt: null
  }
>>> $article->user;
=> <App\User #0000000051cbb92d0000000073e11a3e> {
    id: "1",
    name: "zhang jinglin",
    email: "zjl@example.com",
    created_at: "2015-03-31 03:24:55",
    updated_at: "2015-03-31 03:24:55"
  }
>>> 
ログイン後にコピー

以上所述就是本文的全部内容了,希望大家能够喜欢。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravel Eloquent モデルでの楽観的ロックの実装 Laravel Eloquent モデルでの楽観的ロックの実装 Apr 21, 2023 pm 03:53 PM

この記事では、Laravel に関する関連知識をお届けします。主に、Laravel Eloquent モデルにおけるオプティミスティック ロックの実装について紹介します。コード例もあります。興味のある方は以下をご覧ください。お役に立てれば幸いです。

Laravel 開発: Laravel Eloquent を使用してポリモーフィックな関連付けを実装するには? Laravel 開発: Laravel Eloquent を使用してポリモーフィックな関連付けを実装するには? Jun 13, 2023 pm 04:41 PM

Laravel 開発: LaravelEloquent を使用してポリモーフィックな関連付けを実装する方法は?ポリモーフィックな関連付けは Laravel Eloquent の重要な機能であり、1 つのモデルが複数の異なるモデルとの関係を確立できるようになります。実際のアプリケーションでは、特にデータベース設計において、さまざまな種類のデータの処理が比較的簡単で効率的です。この記事では、Laravel Eloquent を使用してポリモーフィックな関連付けを実装する方法について説明します。 1. ポリモーフィック関連とは何ですか?ポリモーフィズム

Eloquentを使用してLaravelで配列をオブジェクトに変換するにはどうすればよいですか? Eloquentを使用してLaravelで配列をオブジェクトに変換するにはどうすればよいですか? Apr 29, 2024 pm 05:42 PM

Laravel で Eloquent を使用して配列をオブジェクトに変換するには、次の手順が必要です: Eloquent モデルを作成します。 Eloquent の select メソッドを使用して結果を取得し、配列に変換します。 ArrayObject を使用して配列をオブジェクトに変換します。配列の値にアクセスするためのオブジェクト プロパティを取得します。

Laravel 開発: Laravel Eloquent を使用してモデルの関連付けを実装するにはどうすればよいですか? Laravel 開発: Laravel Eloquent を使用してモデルの関連付けを実装するにはどうすればよいですか? Jun 13, 2023 am 10:47 AM

Laravel は、強力な ORM (オブジェクト リレーショナル マッピング) ライブラリである LaravelEloquent を含む人気の PHP フレームワークです。このライブラリは非常に強力で、モデルの関連付けを簡単に実装できるため、データの管理とクエリが容易になります。しかし、多くの開発者は、Laravel Eloquent を使用してモデルの関連付けを実装する方法を知りません。この記事では、Laravel Eloquentを使用してモデルの関連付けを実装する方法を紹介します。 1.ララベル

Laravel 開発: Laravel Eloquent を使用してデータベース モデルを構築するにはどうすればよいですか? Laravel 開発: Laravel Eloquent を使用してデータベース モデルを構築するにはどうすればよいですか? Jun 14, 2023 am 08:21 AM

Laravel開発: LaravelEloquentを使用してデータベースモデルを構築するにはどうすればよいですか? Laravel は、強力で使いやすいデータベース操作ツールである Laravel Eloquent を提供する人気の PHP フレームワークです。従来、PHPを使用してデータベース操作を行うには、必然的に長いSQL文や面倒なコードを大量に記述する必要がありましたが、Laravel Eloquentを使用することでデータベースモデルを簡単に構築でき、迅速な開発とメンテナンスを実現できます。この記事

Laravel 開発: Laravel Eloquent を使用してモデルを構築するにはどうすればよいですか? Laravel 開発: Laravel Eloquent を使用してモデルを構築するにはどうすればよいですか? Jun 14, 2023 am 10:14 AM

Laravel は、そのシンプルさと使いやすさで人気のある PHP Web フレームワークです。 Laravel フレームワークは、データベース モデルを定義するための PHP の使用をサポートし、これらのモデルに基づいた簡単なデータベース インタラクションを提供する Object-RelationalMini マッピングである EloquentORM の優れた実装で知られています。この記事では、Laravel Eloquent を使用してデータベースと迅速かつ確実に対話するモデルを構築する方法について詳しく説明します。

PHP8.0のORM拡張ライブラリ:Eloquent PHP8.0のORM拡張ライブラリ:Eloquent May 14, 2023 am 10:22 AM

データ対話に対する開発者のニーズが高まり続けるにつれて、ORM は現代の開発に不可欠な部分となっています。バックグラウンドでのデータベース操作を非表示にし、CRUD 操作用の簡素化された API を提供できます。これらの ORM ライブラリの中でも、Eloquent は Laravel フレームワークで広く使用されているため、多くの開発者の注目を集めています。 PHP 8.0 では、Eloquent がスタンドアロンの拡張ライブラリとして提供され、プロジェクトで使用できるようになりました。この記事では、Eloq について説明します。

ThinkPHP6 での Laravel の Eloquent ORM の使用 ThinkPHP6 での Laravel の Eloquent ORM の使用 Jun 20, 2023 am 09:40 AM

ThinkPHP6 は非常に人気のある PHP フレームワークであり、Laravel も人気のある PHP フレームワークです。どちらのフレームワークにも独自の機能と利点がありますが、Laravel の EloquentORM (オブジェクト リレーショナル マッピング) エンジンは「PHP 界で最高の ORM」として知られています。 ThinkPHP6を使用する際にLaravelのEloquentORMを使用したい場合はどうすればよいでしょうか?以下で ThinkPHP について詳しく説明します。

See all articles