GVKun编程网logo

laravel Eloquent 模型 多对多(laravel多模块)

21

对于想了解laravelEloquent模型多对多的读者,本文将是一篇不可错过的文章,我们将详细介绍laravel多模块,并且为您提供关于14.Laravel4Eloquent模型对象关系、Larav

对于想了解laravel Eloquent 模型 多对多的读者,本文将是一篇不可错过的文章,我们将详细介绍laravel多模块,并且为您提供关于14. Laravel 4 Eloquent 模型对象关系、Laravel 5框架学习之Eloquent 关系,laraveleloquent、Laravel 5框架学习之Eloquent 关系,laraveleloquent_PHP教程、Laravel 5框架学习之Eloquent (laravel 的ORM),laraveleloquent的有价值信息。

本文目录一览:

laravel Eloquent 模型 多对多(laravel多模块)

laravel Eloquent 模型 多对多(laravel多模块)

需要使用三个数据表:users、roles 和 role_user。role_user 表命名是以相关联的两个模型数据表来依照字母顺序命名,并包含了 user_id 和 role_id 字段。

多对多关联通过编写一个在自身 Eloquent 类调用的 belongsToMany 的方法来定义。举个例子,让我们在 User 模型中定义 roles 方法:

<?PHP

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
/**
* 属于该用户的身份。
*/
public function roles()
{
return $this->belongsToMany('App\Role');
}
}
一旦关联被定义,则可以使用 roles 动态属性来访问用户的身份:

$user = App\User::find(1);

foreach ($user->roles as $role) {
//
}

定义相对的关联
要定义相对于多对多的关联,只需简单的放置另一个名为 belongsToMany 的方法到你关联的模型上。让我们接着以用户身份为例,在 Role 模型中定义 users 方法:

<?PHP

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
/**
* 属于该身份的用户。
*/
public function users()
{
return $this->belongsToMany('App\User');
}
}
如你所见,此定义除了简单的参考 App\User 模型外,与 User 的对应完全相同。因为我们重复使用了 belongsToMany 方法,当定义相对于多对多的关联时,所有常用的自定义数据表与键的选项都是可用的。

获取中间表字段
正如你所知,要操作多对多关联需要一个中间数据表。Eloquent 提供了一些有用的方法来和这张表进行交互。例如,假设 User 对象关联到很多的 Role 对象。访问这些关联对象时,我们可以在模型中使用 pivot 属性来访问中间数据表的数据:

$user = App\User::find(1);

foreach ($user->roles as $role) {
echo $role->pivot->created_at;
}

文章来自 www.96net.com.cn

14. Laravel 4 Eloquent 模型对象关系

14. Laravel 4 Eloquent 模型对象关系

一对一

定义一对一关系(hasOne)

class User extends Eloquent {
    public function phone()
    { // 传递给 hasOne 函数的第一个参数是相关模型的名字
        return $this->hasOne(''Phone'');
    }
}
动态属性调用
$phone = User::find(1)->phone;

这条语句所产生的 SQL 语句如下:

select * from users where id = 1
select * from phones where user_id = 1

注意 Eloquent 假设关系的外键基于模型的名字。在这个例子中假设 Phone 模型使用一个 user_id 外键。

自定义外键
return $this->hasOne(''Phone'', ''custom_key'');

定义逆向关系(belongsTo)

class Phone extends Eloquent {
    public function user()
    {
        return $this->belongsTo(''User'');
    }
}

在上面的例子中,Eloquent 将在 phones 表中寻找 user_id 字段。如果您想定义一个不同的外键字段,您可以通过 belongsTo 函数的第二个参数传递它:

return $this->belongsTo(''User'', ''custom_key'');

一对多

定义一对多关系(hasMany)

class Post extends Eloquent {
    public function comments()
    {
        return $this->hasMany(''Comment'');
    }
}
动态属性调用
$comments = Post::find(1)->comments;
动态属性调用,增加约束条件
$comments = Post::find(1)->comments()->where(''title'', ''='', ''foo'')->first();
自定义外键
return $this->hasMany(''Comment'', ''custom_key'');

定义逆向关系(belongsTo)

class Comment extends Eloquent {
    public function post()
    {
        return $this->belongsTo(''Post'');
    }
}

多对多

定义多对多关系(belongsToMany)

class User extends Eloquent {
    public function roles()
    {
        return $this->belongsToMany(''Role'');
    }
}

注意:需要中间关系表,本例中为 role_user 并且有 user_idrole_id 字段。

自定义外键及关系表
return $this->belongsToMany(''Role'', ''user_roles'', ''user_id'', ''foo_id'');

定义逆向关系(belongsToMany)

class Role extends Eloquent {
    public function users()
    {
        return $this->belongsToMany(''User'');
    }
}

多态关系

定义多态关系(morphTo|morphMany)

class Photo extends Eloquent {
    public function imageable()
    {
        return $this->morphTo();
    }
}
class Staff extends Eloquent {
    public function photos()
    {
        return $this->morphMany(''Photo'', ''imageable'');
    }
}
class Order extends Eloquent {
    public function photos()
    {
        return $this->morphMany(''Photo'', ''imageable'');
    }
}

获取多态关系

$staff = Staff::find(1);
foreach ($staff->photos as $photo) { }

获取多态关系的属主

$photo = Photo::find(1);
$imageable = $photo->imageable;

多态关系的数据库结构

staff
    id - integer
    name - string
orders
    id - integer
    price - integer
photos
    id - integer
    path - string
    imageable_id - integer  // 所属模型 ID
    imageable_type - string // 所属模型

查询关系(has)

// 获取至少有1条评论的文章
$posts = Post::has(''comments'')->get();
// 获取至少有3条评论的文章
$posts = Post::has(''comments'', ''>='', 3)->get();

预加载(with)

foreach (Book::with(''author'')->get() as $book)
{
    echo $book->author->name;
}

在上面的循环中,只有两个查询被执行:

select * from books
select * from authors where id in (1, 2, 3, 4, 5, ...)

预加载多个关系

$books = Book::with(''author'', ''publisher'')->get();

预加载嵌套关系

$books = Book::with(''author.contacts'')->get();

指定条件的预加载

$users = User::with(array(''posts'' => function($query)
{
    $query->where(''title'', ''like'', ''%first%'');
}))->get();

延迟预加载(load)对已在使用中的模型进行预加载

$books = Book::all();
$books->load(''author'', ''publisher'');

向相关模型插入数据

从父模型向子模型插入数据

// 注意:下面这种实例化时直接赋值的方法,需要开启集体赋值
$comment = new Comment(array(''message'' => ''A new comment.''));
$post = Post::find(1);
$comment = $post->comments()->save($comment);

在这个例子中,所插入评论的 post_id 字段将自动设置。

为方便理解,上面的第一行相当于:

$comment = new Comment;
$comment->message = ''A new comment.'';
// 或者
$comment = with(new Comment)->push(array(''message'' => ''A new comment.''));

从子模型向父模型插入数据

$comment = new Comment(array(''message'' => ''A new comment.''));
$post = Post::find(1);
$comment = $comment->post()->associate($post)->save();

向中间表插入数据,多对多关系时的插入方法

增加多对多关系(attach)向中间表增加关系数据(会产生重复数据)

$user = User::find(1);
$user->roles()->attach(1); // 指定 role_id 为1

同时向中间表插入其它字段的值:

$user->roles()->attach(1, array(''describe'' => ''关系描述''));

删除多对多关系(detach)删除中间表指定关系数据

$user->roles()->detach(1);

同步多对多关系(sync)向中间表增加关系数据(不会产生重复数据)

// 只有数组中的 IDs 将会存在关系表中,其它关系将被剔除
$user->roles()->sync(array(1, 2, 3));

同时向中间表插入其它字段的值:

$user->roles()->sync(array(1 => array(''describe'' => ''关系描述'')));

中间表自动关联数据(通过关联 save 数据)

$role = new Role(array(''name'' => ''Editor''));
User::find(1)->roles()->save($role);

同时向中间表插入其它字段的值:

User::find(1)->roles()->save($role, array(''describe'' => ''关系描述''));

触发父模型 updated_at 时间戳(protected $touches)

class Comment extends Eloquent {
    // 子模型中指定更新时需要触发的父模型
    protected $touches = array(''post'');
    public function post()
    {
        return $this->belongsTo(''Post'');
    }
}

与中间表交互(pivot)数据透视表对象

在数据子集中访问数据透视对象

$user = User::find(1);
foreach ($user->roles as $role)
{
    echo $role->pivot->created_at;
}

让数据透视对象包含关联外键以外的其它字段

需要在定义多对多关系时完成:

return $this->belongsToMany(''Role'')->withPivot(''foo'', ''bar'');

让数据透视对象自动维护 created_at 和 updated_at 时间戳

需要在定义多对多关系时完成:

return $this->belongsToMany(''Role'')->withTimestamps();

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

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"
  }
>>> 
登录后复制

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

Laravel 5框架学习之Eloquent 关系,laraveleloquent_PHP教程

Laravel 5框架学习之Eloquent 关系,laraveleloquent_PHP教程

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免费学习笔记(深入)”;

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"
  }
>>> 
登录后复制

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/981355.htmlTechArticleLaravel 5框架学习之Eloquent 关系,laraveleloquent 一个用户可能有多个文章,一个文章是某个用户书写的,这就是关系。同样文章中可能包含多个...

Laravel 5框架学习之Eloquent (laravel 的ORM),laraveleloquent

Laravel 5框架学习之Eloquent (laravel 的ORM),laraveleloquent

laravel 5框架学习之eloquent (laravel 的orm),laraveleloquent

我们来生成第一个模型

复制代码 代码如下:
php artisan make:model Article
#输出
Model created successfully.
Created Migration: 2015_03_28_062517_create_articles_table

查看一下生成的文件 app/Article.php

<&#63;php namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model {

 //

}

登录后复制

没什么特别的,除了继承自 Model 以外,但是具有强大的功能,这些都封装在laravel的Model中。模型自动具有了 save() update() findXXX() 等强大的功能。

tinker 是 laravel提供的命令行工具,可以和项目进行交互。

php artisan tinker

#以下是在tinker中的交互输入
Psy Shell v0.4.1 (PHP 5.4.16 — cli) by Justin Hileman
>>> $name = ''zhang jinglin'';
=> "zhang jinglin"

>>> $name
=> "zhang jinglin"

>>> $article = new App\Article;
=> <App\Article #000000005c4b7ee400000000ab91a676> {}

>>> $article->title = ''My First Article'';
=> "My First Article"

>>> $article->body = ''Some content...'';
=> "Some content..."

>>> $article->published_at = Carbon\Carbon::now();
=> <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
    date: "2015-03-28 06:37:22",
    timezone_type: 3,
    timezone: "UTC"
  }

>>> $article;
=> <App\Article #000000005c4b7ee400000000ab91a676> {
    title: "My First Article",
    body: "Some content...",
    published_at: <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
      date: "2015-03-28 06:37:22",
      timezone_type: 3,
      timezone: "UTC"
    }
  }

>>> $article->toArray();
=> [
    "title"    => "My First Article",
    "body"     => "Some content...",
    "published_at" => <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
      date: "2015-03-28 06:37:22",
      timezone_type: 3,
      timezone: "UTC"
    }
  ]

>>> $article->save();
=> true

#查看数据结果,添加了一条记录

>>> App\Article::all()->toArray();
=> [
    [
      "id"      => "1",
      "title"    => "My First Article",
      "body"     => "Some content...",
      "published_at" => "2015-03-28 06:37:22",
      "created_at"  => "2015-03-28 06:38:53",
      "updated_at"  => "2015-03-28 06:38:53"
    ]
  ]

>>> $article->title = ''My First Update Title'';
=> "My First Update Title"

>>> $article->save();
=> true

>>> App\Article::all()->toArray();
=> [
    [
      "id"      => "1",
      "title"    => "My First Update Title",
      "body"     => "Some content...",
      "published_at" => "2015-03-28 06:37:22",
      "created_at"  => "2015-03-28 06:38:53",
      "updated_at"  => "2015-03-28 06:42:03"
    ]
  ]
  
>>> $article = App\Article::find(1);
=> <App\Article #000000005c4b7e1600000000ab91a676> {
    id: "1",
    title: "My First Update Title",
    body: "Some content...",
    published_at: "2015-03-28 06:37:22",
    created_at: "2015-03-28 06:38:53",
    updated_at: "2015-03-28 06:42:03"
  }

>>> $article = App\Article::where(''body'', ''Some content...'')->get();
=> <Illuminate\Database\Eloquent\Collection #000000005c4b7e1800000000ab91a676> [
    <App\Article #000000005c4b7e1b00000000ab91a676> {
      id: "1",
      title: "My First Update Title",
      body: "Some content...",
      published_at: "2015-03-28 06:37:22",
      created_at: "2015-03-28 06:38:53",
      updated_at: "2015-03-28 06:42:03"
    }
  ]

>>> $article = App\Article::where(''body'', ''Some content...'')->first();
=> <App\Article #000000005c4b7e1900000000ab91a676> {
    id: "1",
    title: "My First Update Title",
    body: "Some content...",
    published_at: "2015-03-28 06:37:22",
    created_at: "2015-03-28 06:38:53",
    updated_at: "2015-03-28 06:42:03"
  }
>>> 

>>> $article = App\Article::create([''title'' => ''New Article'', ''body'' => ''New body'', ''published_at'' => Carbon\Carbon::now()]);
Illuminate\Database\Eloquent\MassAssignmentException with message ''title''

登录后复制

MassAssignmentException,laravel保护我们不能直接插入记录。比如,在一些特殊情况下我们需要直接利用表单的信息填充数据库记录,但是如果我们并没有在表单中添加密码字段,而黑客产生了密码字段连同我们的其他字段一起送回服务器,这将产生修改密码的危险,所以我们必须明确的告诉laravel我们的模型那些字段是可以直接填充的。

修改我们的模型文件 Article.php

<&#63;php namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model {

 protected $fillable = [
    ''title'',
    ''body'',
    ''published_at''
  ];

}

登录后复制

表示,title, body, published_at 是可以直接填充的。

退出 tinker,重新进入

>>> $article = App\Article::create([''title'' => ''New Article'', ''body'' => ''New body'', ''published_at'' => Carbon\Carbon::now()]);
=> <App\Article #000000005051b2c7000000007ec432dd> {
    title: "New Article",
    body: "New body",
    published_at: <Carbon\Carbon #000000005051b2c6000000007ec4081d> {
      date: "2015-03-28 06:55:19",
      timezone_type: 3,
      timezone: "UTC"
    },
    updated_at: "2015-03-28 06:55:19",
    created_at: "2015-03-28 06:55:19",
    id: 2
  }
  
# It''s ok

>>> App\Article::all()->toArray();
=> [
    [
      "id"      => "1",
      "title"    => "My First Update Title",
      "body"     => "Some content...",
      "published_at" => "2015-03-28 06:37:22",
      "created_at"  => "2015-03-28 06:38:53",
      "updated_at"  => "2015-03-28 06:42:03"
    ],
    [
      "id"      => "2",
      "title"    => "New Article",
      "body"     => "New body",
      "published_at" => "2015-03-28 06:55:19",
      "created_at"  => "2015-03-28 06:55:19",
      "updated_at"  => "2015-03-28 06:55:19"
    ]
  ]

>>> $article = App\Article::find(2);
=> <App\Article #000000005051b22b000000007ec432dd> {
    id: "2",
    title: "New Article",
    body: "New body",
    published_at: "2015-03-28 06:55:19",
    created_at: "2015-03-28 06:55:19",
    updated_at: "2015-03-28 06:55:19"
  }

>>> $article->update([''body'' => ''New Updaet Body'']);
=> true

#update自动调用save()
登录后复制

以上所述就是本文的全部内容了,希望能够对大家学习Laravel5框架有所帮助。

我们今天的关于laravel Eloquent 模型 多对多laravel多模块的分享就到这里,谢谢您的阅读,如果想了解更多关于14. Laravel 4 Eloquent 模型对象关系、Laravel 5框架学习之Eloquent 关系,laraveleloquent、Laravel 5框架学习之Eloquent 关系,laraveleloquent_PHP教程、Laravel 5框架学习之Eloquent (laravel 的ORM),laraveleloquent的相关信息,可以在本站进行搜索。

本文标签: