publicfunctionbelongsToMany($related,$table=null,$foreignPivotKey=null,$relatedPivotKey=null,$parentKey=null,$relatedKey=null,$relation=null) 第一个参数是关联模型的类名。第二个参数是中间表,第三个参数是中间表中当前模型类的外键,第四个参数是中间表当前关
在Eloquent 模型上进行关联查询主要分为两种方式,一种是懒惰式加载(动态属性),一种是渴求式加载(通过with方法)。从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以...
如果要统计其它关联模型结果数量字段,可以依次类推,对应字段都是 {relation}_count 结构。 注:实际开发中为了提高查询性能,我们往往是在 posts 表中冗余提供一个 comments_count 字段,每新增一条评论,该字段值加 1,查询的时候直接取该字段即可,从而提高查询的性能。 此外,你还可以通过数组传递多个关联关系一次统计...
use Illuminate\Database\Eloquent\Relations\Relation; Relation::morphMap([ App\Post::class, App\Comment::class, ]); 或者,你可以指定一个自定的字符串与每个模型进行关联: use Illuminate\Database\Eloquent\Relations\Relation; Relation::morphMap([ 'posts' => App\Post::class, 'likes' => App\Like...
use Illuminate\Database\Eloquent\Relations\Relation; Relation::morphMap([ 'posts' => 'App\Post', 'videos' => 'App\Video', ]); 你可以在 AppServiceProvider 的boot 方法中注册这个 morphMap,如果需要的话,也可以创建一个独立的服务提供者来实现这一功能。
Relation::morphMap([ 'posts' => App\Post::class, 'likes' => App\Like::class,]);译者注:可以使用 class_basename(App\Post::class) 来得到 Post 你可以在 AppServiceProvider 中注册你的「多态对照表」,或是创建一个单独的提供者文件。多态多对多关联...
或者是对应字段:Relation::morphMap([ 'posts' => App\Post::class, 'likes' => App\Like::class, ]);译者注:可以使用 class_basename(App\Post::class) 来得到 Post你可以在 AppServiceProvider 中注册你的「多态对照表」,或是创建一个单独的提供者文件。多态多对多关联...
除了withCount 方法外,Eloquent 还提供了 withMin, withMax, withAvg和withSum 等聚合方法。这些方法会通过 {relation}_{function}_{column}的命名方式将聚合结果添加到获取到的模型属性中:use App\Models\Post; $posts = Post::withSum('comments', 'votes')->get(); foreach ($posts as $post) { echo...
如果你想对关联数据进行计数但又不想再发起单独的 SQL 请求,你可以使用 withCount 方法,此方法会在你的结果集中增加一个 {relation}_count 字段:$posts = App\Post::withCount('comments')->get(); foreach ($posts as $post) { echo $post->comments_count; }你还可以像在查询语句中添加约束一样,获取...
$users = AppUser::with(["posts" => function ($query) { $query->orderBy("created_at", "desc");}])->get(); 延迟预加载 有时候你可能需要在上层模型被获取后才预加载其关联。当你需要来动态决定是否加载关联模型时尤其有用: $books = AppBook::all();if ($someCondition) { $books->load("...