如何从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()

注意:您不能将findwhere条件结合使用,如果要添加更多过滤器,请在所有过滤器中应用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中的数据库中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Laravel中的数据库中获取数据?

如何使用 Laravel 从数据库中获取最后的数据

如何从 Laravel 8 Jetstream 注册页面中的数据库中获取数据?

如何使数组从laravel中的数据库中获取数据

如何从设置中获取数据并发送到此片段

如何从 Laravel 中的数组中获取特定的数组值