一、关联模型(一对一)
关联模型就是绑定模型(表)的关系(关联表),后续需要使用联表的时候就可以直接使用关联模型。注意:关联模型必须要创建模型。
1.1 一对一关系
例:一篇文章只有一个作者
1、创建模型(前提)
php artisan make:model Article
php artisan make:model Author
关联模型的关联方法:
在写关联模型的时候要分析出谁关联谁(类似于联表查询的主、从表),谁做主动关联的模型?当前的案例是文章关联作者,需要关联代码写在主模型中(文章模型中)。
语法:
public function 被关联的模型名小写() {
return $this -> hasOne('需要关联模型的命名空间', '被关联模型的关系字段', '本模型中的关系字段');
}
// 定义关联方法,关联作者模型
public function rel_author() {
return $this -> hasOne('App\Models\Author', 'id', 'author_id');
}
创建路由: 创建关联方法: 创建路由方法
// 关联模型
public function guanlian () {
// 查询文章信息
$data = Article::all();
// dump($data);
foreach($data as $key => $value) {
echo '文章id:'. $value -> id . '<br/>';
echo '文章名称:'. $value -> article_name . '<br/>';
echo '作者名称:' . $value -> rel_author -> author_name . '<br/>';
echo '<hr/>';
}
}
效果: 注意:关联关系的使用方法:使用动态属性进行调用。动态属性名称就是先前定义的关联方法名称。
@TOC
二、关联模型(一对多)
2.1 一对多关系
例:一篇文章有多个评论。 由于文章和评论的关系是一对多的关系,所以需要再去创建一个数据表(评论表)。
字段id | 主键 | 字段comment | 评论内容 | 字段article_id | 和文章的关系字段,文章id | 迁移文件的创建 php artisan make:migration comment_table | 增加属性字段: |
---|
public function up()
{
Schema::create('comment', function (Blueprint $table) {
$table->increments('id');
$table->text('comment') -> comment('评论内容');
$table->integer('article_id') -> comment('文章id');
$table->timestamps();
});
}
执行迁移:
php artisan migrate
效果:
创建填充器文件:
php artisan make:seeder CommentTableSeeder
编写填充器文件的代码:
public function run()
{
// 写入数据到comment表中
DB::table('comment') -> insert([
[
'comment' => '阿萨德和济困扶危i哦嗯是的,阿卡卡拉的身份',
'article_id' => rand(1,5)
],
[
'comment' => '圣诞节疯狂辣椒风刀霜剑为哦额陪我',
'article_id' => rand(1,5)
],
[
'comment' => '阿都是会计法;为了李莫愁v男客服即可额',
'article_id' => rand(1,5)
],
[
'comment' => '阿卡戴珊理解范围就那么难吗',
'article_id' => rand(1,5)
],
]);
}
执行填充器
php artisan db:seed --class=CommentTableSeeder
效果:
创建模型:
php artisan make:model Comment
案例:查询每个文章(主)下所有的评论(从)。
关联关系的编写:
public function 被关联的模型名小写() {
return $this -> hasMany('需要关联模型的命名空间', '被关联模型的关系字段', '本模型的关系字段')
}
文章模型定义关联评论方法(一对多):
// 定义评论模型
public function rel_comment() {
return $this -> hasMany('App\Models\Comment', 'article_id', 'id');
}
创建路由: 定义方法:
// 关联模型 一对多
public function yiduiduo () {
// 查询文章
$data = Article::all();
// 循环
foreach($data as $key => $value) {
echo '文章id:'. $value -> id . '<br/>';
echo '文章名称:'. $value -> article_name . '<br/>';
// 循环输出评论
foreach($value -> rel_comment as $k => $v) {
echo '  '.$v -> comment . '<br/>';
}
echo '<hr/>';
}
}
效果:
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!