laravel 一对多关系详解hasMany
表bdgx是一 id 表gxxq是多 bdgx_id 在模型中:
class Bdgx extends Model {
//use SoftDeletes; //是软删除用的 就是数据再。日期字段多了一个日期
protected $table = 'bdgx';
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
public function gxxqs()
{
return $this->hasMany(Gxxq::class);
}
}
控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Bdgx;
class YemianController extends Controller
{
public function index(Bdgx $bdgx, Request $request)
{
// Bdgx 是模型名,本身没有数据,路由里的{bdgx:id}从url yemian/4,里获取了4,也就是{bdgx:4},bdgx对应的是index(Bdgx $bdgx, Request $request)里的$bdgx,这样就获取到了/yemian/4的补丁更新表里id=4的数据,赋予给$bdgx,$bdgx就有了数据,控制里本身可以用,也可以传给模板了。
// 如果url里的id是数据表里不存在的,就会自动转到404页面,对于非异步(如ajax)的页面比较常用,对于异步/弹窗的不太友好,因为你没有其他提示数据不存在的提示框,就展示404吧。
$result = $bdgx->gxxqs()->paginate(10); // ->get()也可以换成paginate(10),数据100行以内的话,分页没啥必要
// $bdgx 就是 补丁更新(父)的model数据
return view('yemian',compact('bdgx', 'result'));
}
}
视图:
{{$bdgx->bbh}}
路由:
Route::get('/yemian/{bdgx:id}', [App\Http\Controllers\YemianController::class, 'index'])->name('yemian');
核心知识点: 模型关系的这个要写在主键id的这个表里面才行
1对1
前面的1是父表,后面的1是子表 父表 加 子表 关联字段,字段名是 子表名_id
1对多 前面的 1 是父表,后面的 多 是子表 子表 加 父表 关联字段,字段名是 父表名_id
多对多,不分父子。
两个表都不需要加关联字段。 关联字段放 新建的 中间表里。
上述路由中{bdgx:id} 是 {bdgx:4} 不是表示 bdgx 就是 4 4对应的是id
实例化不一定是 new Article 这种 比如模型里,直接可以用本模型 $this 代表 $model 控制器里,如果是路由模型绑定的方法里有了 Article $article 可以直接使用 $article 代表这个$model
最近访问时间:2025-04-29 12:16:24