我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。
我有以下表格和以下字段:
帖子:id、标题、正文、创建日期、类别id
类别:id、名称
我有以下两种型号:
class Category extends Eloquent
{
public function posts()
{
return $this->has_many('Post');
}
}
class Post extends Eloquent
{
public function categories()
{
return $this->belongs_to('Category');
}
}
我想出了如何通过传递类别id来获得所有帖子:
category::find(2)->posts()->get())
我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可以输出如下内容:
{$post->title} - Category: {$post->category->name}
感谢任何帮助!
Laravel4的语法稍有不同,它使用camelCase来构建表达式(而L3使用snake_-Case语法)。Laravel(L4)的新语法现在与PSR-1兼容。
L3 : $this->belongs_to('Category');
L4 : $this->belongsTo('Category');
为了证明“急切加载”可以提高应用程序的性能(通过最小化数据库查询),请使用Laravel的事件生态系统。
// app/routes.php
Event::listen('illuminate.query', function($sql) { echo '<h4>' . $sql . '</h4>' ;});
...
我希望你会发现这些提示很有用。
在post模型上,将类别
函数重命名为类别
。一个所属的关系是单数的,所以这篇文章只有一个类别。
关系也有一个速记,这种速记语法很有用,因为它使用起来更简洁,并且结果被缓存。举个例子:
$category = Category::find(1);
foreach($category->posts as post) {
echo $post->title;
}
现在一个例子,如何获得所有的职位与他们的相关类别:
$posts = Post::all();
foreach($posts as $post) {
echo $post->category->name;
}
现在,在执行第二个示例时,您会很快注意到的一件事是,每个帖子的查询数量都在增加。这就是所谓的n1效应。例如,如果您有5篇文章,将执行一个查询来获取这些文章。然后在循环中,我们执行一个查询来获取类别。这将导致总共6个查询。
为了解决这个问题,使用急切加载,这将我们示例中的6个查询减少到2个。
$posts = Post::with('category')->all();
foreach($posts as $post) {
echo $post->category->name;
}
我希望这有帮助!
我有帖子表和评论表。我想得到所有的帖子与它的评论和以下返回只是帖子有评论: 更新 例如 ID帖 1个职位1 2后2 id post\u id评论 1萨姆勒大学评论 Post::with('comments')只返回有注释的帖子,它只返回第一篇帖子,因为第二篇帖子没有注释,我想获取所有帖子(有注释或没有注释)
我正在使用Laravel 5创建一个博客,但我对多对多(通过透视表)关系有一个奇怪的问题。我的DB设置如下: 文章表: id|bigint|20|PK|不为空|自动增量 title|varchar|255|不为空 body|text|不为空 category_id|bigint|20|不为空 created_at|时间戳|不空 updated_at|时间戳|非空 已发布|布尔值|非空 delete
如何制作一对多访问器? 用户模型: 历史模型: 如果我真的喜欢下面,它将工作。 用户模型: 历史模型: 控制器: 刀片视图: 它起作用了! 但是,我应该怎么做,如果我想要这个: 我喜欢 历史模型: 它不工作! 如果我编码像 它会回来的 此集合实例上不存在属性[happy]。 如果我编码像 它会回来的 未定义的属性:Illumb\Database\Eloquent\Relations\HasMany
在我的应用程序中,我更新了从一对多到多对多的关系,我试图找出一种持久化关联功能的方法。 假设我有两个相关的表,例如狗和主人。如果我有一系列的主人,并且我正试图为这些主人获取一份狗的id列表,我应该如何雄辩地做到这一点? 这里也提出了类似的问题:https://laracasts.com/discuss/channels/laravel/getting-many-to-many-related-da
我有以下三个表格: 所以基本上这种关系就像: 用户有许多项目 项目属性到客户端 我的问题是: 如何使用eloquent获得用户的所有客户端? 似乎我不能用户hasManyPass方法,因为在客户端表中没有project_id。 因此,我希望达到的目标是:
我使用的是Laravel 5.4,其模型和表格结构如下: 一个用户可以有多个账户 一个帐号可以被多个用户共享 每个账户有多个持有量 因此,用户通过他们的许多帐户间接拥有许多资产。 我需要帮助在用户模型上定义一个称为“持有量”的关系,以获得适用于用户的所有持有量(基于他们所链接的账户)。 我尝试了很多不同的东西,在谷歌上花了很长时间。我可以接近BelongToMany和hasManyThrough,