Laravel 从多对多关系中获取数据
Laravel get data from many to many relation
对于一个学校项目,我正在 Laravel 框架中创建一个网站。
我无法在我的控制器中处理来自多对多 table 的数据。
这是我的模型:
class Item extends Eloquent {
public function Tags()
{
return $this->belongsToMany('Tag', 'items_has_tags', 'items_id', 'tags_id');
}
}
class Tag extends Eloquent {
public function LearningMaterials()
{
return $this->belongsToMany('LearningMaterial', 'learning_materials_has_tags', 'tags_id', 'learning_materials_id');
}
}
我想在我的控制器中迭代我的项目的所有标签:
//get all items
$all = Item::where('public', '1')->get();
foreach($allLm as $item){
$tags = $item->Tags();
var_dump('will iterate');
foreach($tags as $t){
var_dump('will not iterate');
}
}
我的代码有什么问题?我如何处理我的物品的标签?
仅供参考:我正在创建一个搜索引擎。如果用户插入像 "mana" 这样的输入值,则应显示所有带有标签 "management" 的项目。
Laravel的belongsToMany
方法查询相关模型,没有得到。那是因为您可能希望在查询中有一些额外的约束。您需要做的是:
$tags = $item->Tags()->get();
或者简单地说:
$tags = $item->Tags;
调用关系函数将return一个关系对象(在本例中是BelongsToMany
的一个实例)。您可以使用它 运行 在 运行 查询之前向您的查询添加更多组件。
例如:
$only4Tags = $item->Tags()->take(4)->get();
如果你想要关系的结果,调用get()
或更简单,只需使用魔法属性:
$tags = $item->Tags()->get();
$tags = $item->Tags;
对于一个学校项目,我正在 Laravel 框架中创建一个网站。 我无法在我的控制器中处理来自多对多 table 的数据。
这是我的模型:
class Item extends Eloquent {
public function Tags()
{
return $this->belongsToMany('Tag', 'items_has_tags', 'items_id', 'tags_id');
}
}
class Tag extends Eloquent {
public function LearningMaterials()
{
return $this->belongsToMany('LearningMaterial', 'learning_materials_has_tags', 'tags_id', 'learning_materials_id');
}
}
我想在我的控制器中迭代我的项目的所有标签:
//get all items
$all = Item::where('public', '1')->get();
foreach($allLm as $item){
$tags = $item->Tags();
var_dump('will iterate');
foreach($tags as $t){
var_dump('will not iterate');
}
}
我的代码有什么问题?我如何处理我的物品的标签?
仅供参考:我正在创建一个搜索引擎。如果用户插入像 "mana" 这样的输入值,则应显示所有带有标签 "management" 的项目。
Laravel的belongsToMany
方法查询相关模型,没有得到。那是因为您可能希望在查询中有一些额外的约束。您需要做的是:
$tags = $item->Tags()->get();
或者简单地说:
$tags = $item->Tags;
调用关系函数将return一个关系对象(在本例中是BelongsToMany
的一个实例)。您可以使用它 运行 在 运行 查询之前向您的查询添加更多组件。
例如:
$only4Tags = $item->Tags()->take(4)->get();
如果你想要关系的结果,调用get()
或更简单,只需使用魔法属性:
$tags = $item->Tags()->get();
$tags = $item->Tags;