Laravel-有没有2个循环的hasMany关系的更干净方法?

时间:2019-01-10 12:37:19

标签: php laravel laravel-5

我正在使用最新版本的Laravel。

我有2个MySQL表,分别称为--- - hosts: live remote_user: root vars: destination: /var/www/html/app.mytest.com/releases/{{ ansible_date_time.year }}{{ ansible_date_time.month }}{{ ansible_date_time.day }}{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}{{ ansible_date_time.second }} tasks: - git: repo: 'git@bitbucket:mytest/mytest.git' dest: "{{ destination }}" depth: 1 - name: copying .env file to remote host copy: src: /root/playbooks/resources/live/.env dest: "{{ destination }}/" - name: php artisan migrate shell: "php {{ destination }}/artisan migrate" - name: php artisan package:discover shell: "php {{ destination }}/artisan package:discover" - name: npm install shell: "npm install" - name: npm run dev shell: "npm run dev" - name: php artisan queue:restart shell: "php {{ destination }}/artisan queue:restart" - name: service supervisord restart shell: "service supervisord restart" - name: php artisan queue:flush shell: "php {{ destination }}/artisan queue:flush" ... "authors"

我有2位作者,"articles""John""Sam"有2条文章,John有1条文章,文章有Sam列,其中{ {1}}位作者。

为了显示"user_id"及其ID,我必须进行2次循环

Authors

如果您需要它,这是我的作者模型:

Articles

我主要是在询问是否有内置的方法来清洁此清洁器。

2 个答案:

答案 0 :(得分:4)

是的,您可以执行以下操作:

@foreach($articles as $article)
    {{$article->author->name}}
    <h3>{{$article->name}}</h3>
@endforeach

要使其正常工作,您必须像这样在Article模型中声明相反的关系:

class Article extends Model
{

    public function author(){
        return $this->belongsTo("App\Author", "user_id");
    }
}

答案 1 :(得分:1)

随着您有更多的作者和文章,此查询将变得非常昂贵且缓慢。我不确定您的UI如何显示作者和文章信息,但我会考虑考虑使用一个页面显示作者列表(但不显示他们的文章)。然后让每个作者都有一个详细页面。然后,您可以在“作者详细信息”页面中列出所有可以根据作者的ID进行查询的快捷高效的文章。这将帮助您的网站更整洁,查询效率更高。