목차
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 Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Laravel Eloquent 모델에서 낙관적 잠금 구현 Laravel Eloquent 모델에서 낙관적 잠금 구현 Apr 21, 2023 pm 03:53 PM

이 기사는 Laravel Eloquent 모델의 낙관적 잠금 구현을 주로 소개합니다. 관심 있는 친구는 아래를 살펴보는 것이 좋습니다.

Laravel 개발: Laravel Eloquent를 사용하여 다형성 연관을 구현하는 방법은 무엇입니까? Laravel 개발: Laravel Eloquent를 사용하여 다형성 연관을 구현하는 방법은 무엇입니까? Jun 13, 2023 pm 04:41 PM

Laravel 개발: LaravelEloquent를 사용하여 다형성 연관을 구현하는 방법은 무엇입니까? 다형성 연관(Polymorphic Association)은 Laravel Eloquent의 중요한 기능으로, 하나의 모델이 여러 다른 모델과 관계를 설정할 수 있도록 해줍니다. 실제 응용 프로그램에서 다양한 유형의 데이터를 처리하는 것은 특히 데이터베이스 설계에서 상대적으로 간단하고 효율적입니다. 이 글에서는 Laravel Eloquent를 사용하여 다형성 연관을 구현하는 방법에 대해 설명합니다. 1. 다형성 연관이란 무엇입니까? 다형성

Laravel에서 배열을 객체로 변환하기 위해 Eloquent를 사용하는 방법은 무엇입니까? Laravel에서 배열을 객체로 변환하기 위해 Eloquent를 사용하는 방법은 무엇입니까? 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(Object Relational Mapping) 라이브러리인 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를 사용하면 데이터베이스 모델을 쉽게 구축하고 신속한 개발 및 유지 관리를 수행할 수 있습니다. 이 기사

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을 살펴보겠습니다.

Laravel 개발: Laravel Eloquent를 사용하여 모델을 구축하는 방법은 무엇입니까? Laravel 개발: Laravel Eloquent를 사용하여 모델을 구축하는 방법은 무엇입니까? Jun 14, 2023 am 10:14 AM

Laravel은 단순성과 사용 용이성으로 인해 널리 사용되는 인기 있는 PHP 웹 프레임워크입니다. Laravel 프레임워크는 PHP를 사용하여 데이터베이스 모델을 정의하고 이러한 모델을 기반으로 쉬운 데이터베이스 상호 작용을 제공하는 Object-RelationalMini 매핑인 EloquentORM의 탁월한 구현으로 잘 알려져 있습니다. 이 기사에서는 Laravel Eloquent를 사용하여 데이터베이스와 빠르고 안정적으로 상호 작용하는 모델을 구축하는 방법을 자세히 설명합니다.

ThinkPHP6에서 Laravel의 Eloquent ORM 사용하기 ThinkPHP6에서 Laravel의 Eloquent ORM 사용하기 Jun 20, 2023 am 09:40 AM

ThinkPHP6은 매우 인기 있는 PHP 프레임워크이고 Laravel은 또 다른 인기 있는 PHP 프레임워크입니다. 두 프레임워크 모두 고유한 기능과 장점을 가지고 있지만 Laravel의 EloquentORM(Object Relational Mapping) 엔진은 "PHP 세계 최고의 ORM"으로 알려져 있습니다. ThinkPHP6을 사용할 때 Laravel의 EloquentORM을 사용하려면 어떻게 해야 합니까? 아래에서 ThinkPHP에 대해 자세히 논의하겠습니다.

See all articles