-
2018-06-29 13:44:03
laravel是PHP框架,以下操作似乎没有用到PHP和MYSQL语句,就这么优雅地搞定了:
有两个表:
赛事表:races
赛事项目表:items (包含字段:race_id)
一个赛事有多个比赛项目,多个比赛项目对应一个赛事。
建立模型:
Race.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Race extends Model { protected $fillable = ['title']; public function items(){ return $this->hasMany('App\Models\Item'); } }
Item.php:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Item extends Model { protected $fillable=['race_id']; public function race() { return $this->belongsTo('App\Models\Race'); } }
控制器:
RacesController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Race; class RacesController extends Controller { .......... public function destroy(race $race) { $race->delete(); $race->items()->delete(); return redirect('/races')->with('notice','删除成功'); } ................................. }
更多相关内容 -
laravel 模型 一对一 一对多 多对多的关联
2019-12-03 09:51:46一对一关联是一个非常简单的关联关系,例如,一个User模型有一个与之关联的Phone模型,一个人对应一个手机,一个手机对应一个人! user表:id,user_name; phone表:id,phone_name,user_id; 主表:user表,从表:...一对一关联是一个非常简单的关联关系,例如,一个
User
模型有一个与之关联的Phone
模型,一个人对应一个手机,一个手机对应一个人!user表:id,user_name;
phone表:id,phone_name,user_id;
主表:user表,从表:phone表;
正向关联
return $this->hasOne('App\Phone', 'foreign_key', 'local_key');
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 获取关联到用户的手机 */ public function phone() { return $this->hasOne('App\Phone', 'user_id', 'id'); } }
我们可以从
User
中访问Phone
模型,相应地,也可以在Phone
模型中定义关联关系从而让我们可以拥有该手机的User
。我们可以使用belongsTo
方法定义与hasOne
关联关系相对的关联:反向关联:belongTo
return $this->belongsTo('App\User', 'foreign_key', 'other_key');
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Phone extends Model{ /** * 获取拥有该手机的用户 */ public function user() { return $this->belongsTo('App\User', 'user_id', 'id'); } }
一对多
一个博客文章有多个评论,一个评论只属于某一个文章
博客文章 post:id,title,author,content,
评论:comment:id,post_id,
return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
return $this->belongsTo('App\Post', 'foreign_key', 'other_key');
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model{ /** * 获取博客文章的评论 */ public function comments() { return $this->hasMany('App\Comment', 'post_id', 'id'); } }
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Comment extends Model{ /** * 获取评论对应的博客文章 */ public function post() { return $this->belongsTo('App\Post', 'post_id', 'id'); } }
withDefault?这个是啥玩意?干嘛用的?
在 Laravel 5.4 中新增加的一个方法
在实际的过程中,有可能会出现这种情况,某个用户删除了,但是这个用户对应的Phone记录没有删除,或者某个文章删除了,但是这个文章对应的评论没有删除,当我们用Phone Model查询用户的时候,或者用评论查询文章的时候,(用belongTo查询的),就会返回一个null值,有时候这个null值会引发一些问题,现在有点头绪了吧?withDefault()应运而生。
/** * 获取文章作者 */ public function user() { return $this->belongsTo('App\User')->withDefault(); }
这种情况下,
withDefault
会返回一个 User Model 实例,从而避免了null
引发的问题。withDefault
方法还支持接收参数, 为生成的实例对象填充数据,参数类型可以是数组或者闭包。return $this->belongsTo(User::class)->withDefault([ 'name' => '我是XXX', ]); return $this->belongsTo(User::class)->withDefault(function ($user) { $user->name = '我是XXX'; });
多对多
多对多关联比
hasOne
和hasMany
关联关系要稍微复杂一些。这种关联关系的一个例子就是在权限管理中,一个用户可能有多个角色,同时一个角色可能被多个用户共用。例如,很多用户可能都有一个“Admin”角色。要定义这样的关联关系,需要三张数据表:users
、roles
和role_user
,role_user
表按照关联模型名的字母顺序命名,并且包含user_id
和role_id
两个列。多对多关联通过编写调用
belongsToMany
方法返回结果的方式来定义,例如,我们在User
模型上定义roles
方法:users表:id,......;
roles表:id,.....;
role_user表:user_id,role_id
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 用户角色 */ public function roles() { //这里要注意,Role前必须加APP\,还有就是第二个参数是表名,数据库里那个表叫啥,他就叫啥,第三个参数是本类的字段,第四个参数是要查找的字段 return $this->belongsToMany('App\Role','role_user','user_id','role_id'); } }
$userinfo = $user->find($id);
$return_data = $userinfo->with('roles')->get();
$return_data = $userinfo->roles()->get();
接着你就可以使用得到的数据了!
-
laravel 模型中的一对一,一对多,多对多的关联
2021-01-12 08:29:52一对一一对一关联是一个非常简单的关联关系,例如,一个User模型有一个与之关联的Phone模型,一个人对应一个手机,一个手机对应一个人!user表:id,user_name;phone表:id,phone_name,user_id;主表:user表,从表:...一对一
一对一关联是一个非常简单的关联关系,例如,一个 User 模型有一个与之关联的 Phone 模型,一个人对应一个手机,一个手机对应一个人!
user表:id,user_name;
phone表:id,phone_name,user_id;
主表:user表,从表:phone表;
正向关联
return $this->hasOne(‘AppPhone‘, ‘foreign_key‘, ‘local_key‘);
1 <?php2
3 namespace App;4
5 useIlluminateDatabaseEloquentModel;6
7 class User extendsModel{8 /**9 * 获取关联到用户的手机10 */
11 public functionphone()12 {13 return $this->hasOne(‘AppPhone‘, ‘user_id‘, ‘id‘);14 }15 }16
我们可以从 User 中访问 Phone 模型,相应地,也可以在 Phone 模型中定义关联关系从而让我们可以拥有该手机的 User。我们可以使用 belongsTo 方法定义与 hasOne 关联关系相对的关联:
反向关联:belongTo
return $this->belongsTo(‘AppUser‘, ‘foreign_key‘, ‘other_key‘);
1 <?php2
3 namespace App;4
5 useIlluminateDatabaseEloquentModel;6
7 class Phone extendsModel{8 /**9 * 获取拥有该手机的用户10 */
11 public functionuser()12 {13 return $this->belongsTo(‘AppUser‘, ‘user_id‘, ‘id‘);14 }15 }16
一对多
一个博客文章有多个评论,一个评论只属于某一个文章
博客文章 post:id,title,author,content,
评论:comment:id,post_id,
return $this->hasMany(‘AppComment‘, ‘foreign_key‘, ‘local_key‘);
return $this->belongsTo(‘AppPost‘, ‘foreign_key‘, ‘other_key‘);
1 <?php2
3 namespace App;4
5 useIlluminateDatabaseEloquentModel;6
7 class Post extendsModel{8 /**9 * 获取博客文章的评论10 */
11 public functioncomments()12 {13 return $this->hasMany(‘AppComment‘, ‘post_id‘, ‘id‘);14 }15 }
1 <?php2
3 namespace App;4
5 useIlluminateDatabaseEloquentModel;6
7 class Comment extendsModel{8 /**9 * 获取评论对应的博客文章10 */
11 public functionpost()12 {13 return $this->belongsTo(‘AppPost‘, ‘post_id‘, ‘id‘);14 }15 }
withDefault?这个是啥玩意?干嘛用的?
在 Laravel 5.4 中新增加的一个方法
在实际的过程中,有可能会出现这种情况,某个用户删除了,但是这个用户对应的Phone记录没有删除,或者某个文章删除了,但是这个文章对应的评论没有删除,当我们用Phone Model查询用户的时候,或者用评论查询文章的时候,(用belongTo查询的),就会返回一个null值,有时候这个null值会引发一些问题,现在有点头绪了吧?withDefault()应运而生。
1 /**2 * 获取文章作者3 */
4 public functionuser()5 {6 return $this->belongsTo(‘AppUser‘)->withDefault();7 }
这种情况下,withDefault 会返回一个 User Model 实例,从而避免了 null 引发的问题。withDefault 方法还支持接收参数, 为生成的实例对象填充数据,参数类型可以是数组或者闭包。
return $this->belongsTo(User::class)->withDefault([‘name‘ => ‘我是xzj‘,]);return $this->belongsTo(User::class)->withDefault(function ($user) {$user->name = ‘我是xzj‘;
});
多对多
多对多关联比 hasOne 和 hasMany 关联关系要稍微复杂一些。这种关联关系的一个例子就是在权限管理中,一个用户可能有多个角色,同时一个角色可能被多个用户共用。例如,很多用户可能都有一个“Admin”角色。要定义这样的关联关系,需要三张数据表:users、roles 和 role_user,role_user 表按照关联模型名的字母顺序命名,并且包含 user_id 和 role_id 两个列。
多对多关联通过编写调用 belongsToMany 方法返回结果的方式来定义,例如,我们在 User 模型上定义 roles 方法:
users表:id,......;
roles表:id,.....;
role_user表:user_id,role_id
1 <?php2
3 namespace App;4
5 useIlluminateDatabaseEloquentModel;6
7 class User extendsModel{8 /**9 * 用户角色10 */
11 public functionroles()12 {13 //这里要注意,Role前必须加APP,还有就是第二个参数是表名,数据库里那个表叫啥,他就叫啥,第三个参数是本类的字段,第四个参数是要查找的字段
14 return $this->belongsToMany(‘AppRole‘,‘role_user‘,‘user_id‘,‘role_id‘);15 }16 }
$userinfo = $user->find($id);
$return_data = $userinfo->with(‘roles‘)->get();
$return_data = $userinfo->roles()->get();
接着你就可以使用得到的数据了!
-
laravel 中的一对多模型关系
2021-08-18 13:26:31创建的2张表字段,及模型关系(hasmany和bekongTo) 增加使用 删除使用 修改使用 查询使用创建的2张表字段,及模型关系(hasmany 和 bekongTo)
增加使用
删除使用
修改使用
查询使用
-
php – 如何在Laravel 5中更新一对多(hasMany)关系
2021-05-07 12:48:09老问题,但这是一个答案.1和2 – 如果未提供现有图像ID,Laravel的updateOrCreate()方法将更新现有记录并插入新记录.请参阅Eloquent ORM’s Update documentation下的“updateOrCreate”.$images = App\ProductImage::... -
laravel 多对多关联模型CURD详解
2018-08-28 15:10:321、laravel官方文档中给出了一种用户-角色(User-Role)关系的例子。在这个例子中,一个用户可能与多个角色对应,反过来同理,一个角色也可能对应多个用户。官方说的比较简单,这里详细介绍一下。 一个用户可以有多个... -
laravel Model 模型关联关系 一对多 - 多对一
2019-09-29 21:59:25Model 模型关联关系 一对多 - 多对一 一对多 hasMany() 一对多反向 belongsTo() 定义关系,一个用户可以发布多篇文章,每一篇文章对应一个用户,用户对文章是一对多,文章对用户就是一对多反向,多对一。 ... -
Laravel学习笔记(21)模型关系(一对一,一对多,多对多)
2020-02-14 21:25:42一对一 生成相应的表 // 自动表名为identity_cards,手动migration名为create_identity_cards_table php artisan make:migration create_identity_cards_table // 手动表名为identity_cards,手动migration名为... -
Laravel 模型关系:多态一对多
2021-01-28 19:19:45文章可以接受多条评论,视频也可以接受多条评论。 表 articles id - integer title - string body - text videos id - integer title - string url - string comments id - integer body - text commen... -
laravel中间表附加字段的数据,使用第二参数(多对多新增、删除、移出)
2022-02-21 11:05:36laravel中间表附加字段的数据,使用第二参数 展示: 代码: //得到添加权限的用户 $user = User::find(19); //得到权限的id,超级管理员id $roleId = 1; //给辉夜设置成超级管理员 $user->role()->... -
laravel 多对多关联 attach detach sync
2019-03-16 16:46:00用户表和角色表,多对多关联,一个用户有多个角色,一个角色属于多个用户 添加多对多关联attach: 给1号用户添加1号角色,并把关联表的column字段赋值为$value,后边的数组需要的时候再添加 $user = App\User::find... -
Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理
2014-10-16 12:02:06本博文主要介绍 Laravel 框架中 Eloquent 对一对多关系的处理,在 Laravel Administrator(后台扩展包) 您的数据库可能是彼此相关的。比如,一篇博客文章可能有许多评论,或者一个订单与下订单的用户相关。Eloquent ... -
Laravel 模型关系:多态一对一
2021-01-28 18:56:29项目:运营人员就一个图片,发布一篇博客或者一篇文章。 表 articles id - integer title - string blogs id - integer title - string images id - integer url - string imageable_id - integer ... -
laravel模型关联(多对多)
2019-11-24 14:56:56例如一个学生需要报多个兴趣班,同时每个兴趣班也会有多个学生,学生和兴趣班之间就是多对多的关系,要定义这种关联,需要三个数据库表:student,classes和classes_student。classes_student表存放学生所报兴趣班的... -
Laravel中的 Pivot 表与多对多关系
2019-10-28 21:59:56今天谈的是Laravel中一个非要有用,但一开始可能有点难理解的功能。Pivot 表是两个“主表”之间关系的中间表。 Pivot 表实例 在官方文档中,他们用 用户-角色(User-Role) 关系来做例子,用户可能会属于多个角色,... -
laravel5.3 一对多表 分页查询
2017-02-09 17:27:002019独角兽企业重金招聘Python工程师标准>>> ... -
Laravel-admin-模型详情-一对一关联关系
2022-03-23 22:23:44一对一关联关系中,关闭新增,导出等的操作按钮 $show->author('作者信息', function ($author) { ///admin/users?去admin/routes看一下你就明白 $author->setResource('/admin/users')->panel()->tools... -
Laravel 模型关联——连带删除
2020-05-20 10:52:05在项目中,我们经常需要在删除一个表中数据的时候,和它相关联的表也要有相应的操作(删除或修改),Laravel 提供了非常便捷的操作方法 解决方法 现在假设我们在做一个博客系统,那么就会有文章表、用户表,并且这两... -
laravel入门-mysql一对多
2018-12-11 14:06:00里面定义了user 和 order的一对多的关系 4. 控制器 1 cat WeclomeController. php 2 3 $u = User::find(1 ); 4 return response( $u -> userTo); 5 6 7 /* ... -
Laravel 关联表模型和多对多关系
2017-09-01 23:43:43Laravel 关联表模型和多对多关系(pivot table /many-to-many) -
3分钟短文:说说Laravel模型关联关系最单纯的“一对一”
2020-10-12 10:32:11所以,laravel模型提供了关联关系,本文就来梳理梳理那些用法。 代码时间 我们不要PPT似的念稿子,罗列出所有的关系模型,那样不直观也不是高效学习的方式。 还是从示例触发,看看关联关系到底解决的是什么问题,... -
laravel 文章与分类(多对多)
2019-10-09 13:16:49文章/分类–多对多 写在前面的话:在处理这个问题的时候心态已经爆炸了…在真正解决之后我们就来总结一下吧,毕竟以后要用到的… 项目环境:Laravel5.6+homestead+MySql (下次用laravel6.0试一下,我们要跟上时代的... -
laravel软删除和恢复删除用户
2021-05-27 15:49:45本文目录一、软删除 一、软删除 软删除必须满足条件: 1、表中必须有一个软删除字段 2、模型中引入对应的操作(trait)实现多继承 -
Laravel基础课 使用Eloquent ORM删除数据
2022-02-05 21:18:40通过主键删除 指定多个id $sum=student::destory(1016,1017); $sum=student::destory([1016,1017]);//返回值是删除记录条数 var_dump($sum); 通过指定条件删除 $sum=Student::where('id','>',1010)-& -
laravel_admin多文件上传对文件不进行预览
2019-09-06 14:00:55多文件上传对于一些无法被解析的文件可能会造成页面崩溃页面卡死等问题,而解决这个问题的方法就是不去预览这些文件直接进行文件的上传,如何屏蔽预览文件呢?只需要加上一行代码即可 文件位置 vendor\encore\... -
Laravel 模型关系:多态多对多
2021-01-28 19:36:28可以给一篇文章打上多个标签。可以给一个视频打上多个标签。 一个标签可以贴在多个文章上面。一个标签也可以贴在多个视频上。 表 articles id - integer name - string videos id - integer name - string ...