如何从Laravel中的数据库中获取数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从Laravel中的数据库中获取数据?相关的知识,希望对你有一定的参考价值。
我在我的模型tag.php中使用此代码
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Tag extends Model
{
protected $fillable = [
'tag'
];
public function articles(){
return $this->belongsToMany(Article::class);
}
}
并且我将此代码用于我的控制器
public function fillter($target){
$tags = tag::where('id', 3)->count();
$article = $tags->articles;
foreach ($article as $article){
return $article->title;
}
}
当我运行此项目时,消息为:属性[articles]在此集合实例上不存在。
但是如果我将这段代码用于控制器,则该项目可以运行
$tags = tag::where('id', 3)->first();
答案
您实际上正在尝试从整数值获取文章,因为这是count()
函数返回的内容。这行代码返回一个整数:
$tags = tag::where('id', 3)->count(); // For ex: 3
您正在尝试在下一行代码中执行此操作:
$article = 3->articles; //Which doesn't exist
通过在此处使用此行代码:
$tags = tag::where('id', 3)->first();
您将返回一个Tag
实例,该实例实际上具有articles
属性。
此外,由于以下两个原因,您的foreach
代码无法使用:
First:您不能在foreach循环中使用相同的变量,它应该像这个:
foreach($articles as $article)
Second:由于有return语句,它将在第一个循环后停止执行:
foreach ($articles as $article){
return $article->title;
}
最好将$articles
变量传递到您的视图,然后在其中进行foreach循环。
另一答案
您应注意不要混淆模型和集合。
Tag模型包含文章,而Tag集合则没有。同样,像您一样在for循环中返回也没有意义,因为它会在第一个元素上返回。我想您想要一个与标签相关的所有标题的列表。我认为可以这样表示:
$tags = tag::where('id', 3)->with('articles')->get();
return $tags->pluck('articles)->pluck('title');
另一答案
您希望从count()
的结果进行迭代得到什么?它只是返回标签的总数。
而不是使用where条件来过滤使用id,最好使用简短的方法find()
。
注意:您不能将find与where条件结合使用,如果要添加更多过滤器,请在所有过滤器中应用where条件。
Use AppTag;
public function fillter($target){
$tag = Tag::find(3);
$articles = $tag->articles;
foreach ($articles as $article){
return $article->title; // stop at the first loop?
}
}
以上是关于如何从Laravel中的数据库中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章