laravel笔记8 产品管理模块 关联模型
关联模型主要关系
一对一
一对多
多对一(反向)
多对多
1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、 主键、外键和索引的区别
主键、外键和索引的区别?
|
主键 |
外键 |
索引 |
定义: |
唯一标识一条记录,不能有重复的,不允许为空 |
表的外键是另一表的主键, 外键可以有重复的, 可以是空值 |
该字段没有重复值,但可以有一个空值 |
作用: |
用来保证数据完整性 |
用来和其他表建立联系用的 |
是提高查询排序的速度 |
个数: |
主键只能有一个 |
一个表可以有多个外键 |
一个表可以有多个惟一索引 |
问题:在产品列表里面显示分类的名称,而不是id
ID | 标题 | 所属分类 | 浏览次数 | 发布时间 | 操作 |
---|---|---|---|---|---|
3 | 阮阮阮阮阮 | 1 | 44 | 2020-08-10 08:46:00 |
打开产品模型Product.php
class Product extends Model
{
public function category(){
//产品和分类是反向多对一的关系 产品属于分类 参数1是分类的模型 cid是外键 还可以有第三个参数 主键
return $this->belongsTo('App\Category','cid');
}
}
这样产品模型和分类模型就关联上了,可以去ProductController控制器验证一下
public function index()
{
$list = Product::orderby('created_at','Desc')->OrderBy('id','Desc')->paginate(10);
// foreach ($list as $item){
//这里会调用数据模型product.php里面的category方法,->name打印分类
// dump($item->category->name);
// }die;
return view('admin.product.index')->with('list',$list);
}
然后在blade模板里面
<tr>
<th class="text-center" style='width:60px;'> ID</th>
<th class="text-center">标题</th>
<th class="text-center" style='width:120px'>所属分类</th>
<th class="text-center" style='width:120px'>浏览次数</th>
<th class="text-center" style='width:150px'>发布时间</th>
<th class="text-center" style="width: 150px;">操作</th>
</tr>
</thead>
<tbody>
@foreach ($list as $item)
<tr>
<td class="text-center">{{$item->id}}</td>
<td class=>{{$item->title}}</td>
<td class="text-center">{{$item->category->name}}</td>
<td class="text-center">{{$item->views}}</td>
<td class="text-center">{{$item->created_at}}</td>
最后效果
ID | 标题 | 所属分类 | 浏览次数 | 发布时间 | 操作 |
---|---|---|---|---|---|
3 | 阮阮阮阮阮 | php基础 | 44 | 2020-08-10 08:46:00 |