찾다
php教程php手册Laravel 5框架学习之Eloquent 关系,laraveleloquent

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으로 문의하세요.
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实现多态关联?多态关联是LaravelEloquent的一项重要功能,它可以使一个模型和多个不同的模型建立关联关系。在实际应用中,处理不同类型的数据相对简单且高效,尤其在数据库设计上非常方便。在本文中,我们将讨论如何使用LaravelEloquent实现多态关联。一、什么是多态关联?多态

如何在 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是一款流行的PHP框架,其中包含了强大的ORM(对象关系映射)库——LaravelEloquent。这个库非常强大,可以帮助我们轻松地实现模型关联,从而更加方便地管理和查询数据。但很多开发者却不知道如何使用LaravelEloquent实现模型关联。在本文中,我将介绍如何使用LaravelEloquent实现模型关联。一、Laravel

Laravel开发:如何使用Laravel Eloquent构建数据库模型?Laravel开发:如何使用Laravel Eloquent构建数据库模型?Jun 14, 2023 am 08:21 AM

Laravel开发:如何使用LaravelEloquent构建数据库模型?Laravel是一款广受欢迎的PHP框架,其提供了强大且易于使用的数据库操作工具——LaravelEloquent。在过去,要使用PHP进行数据库操作难免要写大量冗长的SQL语句和繁琐的代码,而使用LaravelEloquent则能够轻松地构建数据库模型,实现快速开发和维护。本文

PHP8.0中的ORM扩展库:EloquentPHP8.0中的ORM扩展库:EloquentMay 14, 2023 am 10:22 AM

随着开发者对于数据交互需求的不断增长,ORM成为了现代开发中不可或缺的一部分。它能够将数据库操作隐藏在后台,并提供简化的API来进行CRUD操作。在这些ORM库中,Eloquent引起了不少开发者的注意,因为它在Laravel框架中已经得到了广泛的使用。在PHP8.0中,Eloquent作为独立的扩展库,现在可以在您的项目中使用。在本文中,我们将探讨Eloq

Laravel开发:如何使用Laravel Eloquent构建模型?Laravel开发:如何使用Laravel Eloquent构建模型?Jun 14, 2023 am 10:14 AM

Laravel是一款流行的PHPWeb框架,由于其简单易用,广受欢迎。Laravel框架以其实现卓越的EloquentORM而著称,ORM是Object-RelationalMini映射,支持使用PHP定义数据库模型,并根据这些模型提供轻松的数据库交互方式。本文将详细介绍如何使用LaravelEloquent构建模型,以实现快速可靠地与数据库进行交互

在ThinkPHP6中使用Laravel的Eloquent ORM在ThinkPHP6中使用Laravel的Eloquent ORMJun 20, 2023 am 09:40 AM

ThinkPHP6是一款十分流行的PHP框架,而Laravel则是另一款备受欢迎的PHP框架。两个框架都拥有各自的特点和优势,但其中Laravel的EloquentORM(对象关系映射)引擎被誉为“PHP世界最好的ORM”。在使用ThinkPHP6时,如果我们想用上Laravel的EloquentORM,该怎么办呢?下面就让我们来详细探讨ThinkPHP

See all articles

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

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경