检索 laravel 集合上的所有元素

Posted

技术标签:

【中文标题】检索 laravel 集合上的所有元素【英文标题】:Retrieve all elements on laravel collection 【发布时间】:2020-05-18 22:00:06 【问题描述】:

我刚刚开始使用 Laravel。我目前正在创建某种“Instagram”应用程序作为示例。所以我有4张桌子。用户、图像、评论和喜欢。我已经使用 php artisan 命令 make:model 创建了“模型”,并将一些数据包含到数据库中。问题是,在创建了模型之间的关系之后。

use App\Image;

class Comment extends Model

    protected $table = 'comments';
    protected $primaryKey = 'CommentId';

    public function user()
    
        return $this->belongsTo('App\User', 'UserId');
    

    public function image()
    
        return $this->belongsTo('App\Image', 'ImageId');
    


在图像模型上做同样的事情


class Image extends Model

    protected $table = 'images';
    protected $primaryKey = 'ImageId';

    public function comments() 
    
        return $this->hasMany('App\Comment', 'CommentId');
    

    public function likes()
    
        return $this->hasMany('App\Like', 'LikeId');
    

    public function user()
    
        return $this->belongsTo('App\User', 'UserId');
    

执行后我无法获取图像上的所有 cmets:


Route::get('/', function () 
    $images = Image::all();


    foreach ($images as $image) 
        echo "Uploaded By: ".$image->user->FirstName."<br>";
        echo "<strong>Comments</strong><br>";

        foreach ($image->comments as $comment) 
        
            echo "Comment: ".$comment->Content;
        
    
    die();
    return view('welcome');
);

我只能在每张图片上获取一个元素,即使该图片有超过 1 条评论。

【问题讨论】:

【参考方案1】:

我认为问题在于您的 cmets 关系:

 public function comments() 
    
        return $this->hasMany('App\Comment', 'CommentId');
    

应该是:

 public function comments() 
    
        return $this->hasMany('App\Comment', 'ImageId');
    

hasMany 关系中的第二个参数应该是关联数据库中两个表的外键。

更多细节在:

https://laravel.com/docs/7.x/eloquent-relationships#one-to-many

【讨论】:

你说的很对,就是这样。非常感谢

以上是关于检索 laravel 集合上的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Laravel 集合中元素的索引

Laravel Artisan 控制台命令无法检索模型集合

使用带有 Laravel PHP 的 Gmail Api 读取网站上的所有 gmail 收件箱,然后回复特定的电子邮件

Laravel 刀片上的 Vuejs

我想自学laraver,请诸位前辈给一些建议,谢谢

将数组从 AuthController 传递到 Laravel 5 中的登录视图