HasMany对象还是Eloquent:哪个更好?

时间:2018-02-27 01:54:07

标签: php laravel-5 orm laravel-eloquent laravel-5.6

我有

的以下控制器
blog

我的博客模型最初看起来像

public function show($slug)
{
    $post = Blog::where('slugs', '=', $slug)->first();

    $vars['pageTitle'] = Config::get('site.pageTitle') . $post['title'];

    // The breadcrumbs... needs to be repopulated every page
    $vars['breadCrumbs'] = [[
        'url'   => action('SimpleController@index'),
        'title' => 'CovertDEV'
    ],[
        'url'   => action('BlogController@index'),
        'title' => 'Blog'
    ],[
        'url'   => route('blog_post', ['slug' => $slug]),
        'title' => $post['title']
    ]];

    $vars['blog'] = $post;

    // The following line is what the question is about
    $vars['comments'] = $post->Blog_comments->groupBy('comment_id');

    return view('blog', $vars);
}

和blog_comments

namespace App;

use Illuminate\Database\Eloquent\Model;

class Blog extends Model
{
    //

    public function tags()
    {
        return $this->belongsToMany('App\Tag');
    }

    public function blog_comments()
    {
        return $this->hasMany('App\Blog_comment');
    }

    public function users()
    {
        return $this->belongsTo('App\User', 'user_id');
    }
}

我正在检索帖子的评论并在页面上显示。一切都很完美......但后来我尝试使用我的关系......(将这一行改为......)

namespace App;

use Illuminate\Database\Eloquent\Model;

class Blog_comment extends Model
{
    //

    public function users()
    {
        return $this->belongsTo('App\User', 'user_id');
    }

    public function blogs()
    {
        return $this->belongsTo('App\Blog');
    }

}

这同样有效。我的帖子不大,只是一个简单的Lorem Ipsum'测试文本和7条注释来测试该功能,所以我没有看到两种方法之间的加载时间有任何差异。

或者他们都是一样的?以前的方式看起来更好,但我不确定我是否按预期实施了ORM,如果没有,那么哪种方式更好?

但我是Laravel的新手(这是我的第一个框架)所以我不知道......哪种方式更好/更快/更有效?也许有一种更好/更有效的方法来实现这一点,我还不知道。

对不起,如果这看起来很明显。我希望在继续项目之前将其排除在外...在找到将信息组合在一起的更好方法之后,不想重做所有内容。

提前致谢!

我的数据库转储

$vars['comments'] = $post->blog_comments()->get()->groupBy('comment_id');

我需要结果数组来查看以下内容:

CREATE TABLE `blog_comments` (
  `id` int(10) UNSIGNED NOT NULL,
  `user_id` int(10) UNSIGNED NOT NULL,
  `blog_id` int(10) UNSIGNED NOT NULL,
  `comment_id` int(11) NOT NULL DEFAULT '0',
  `comment` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `likes` int(11) NOT NULL DEFAULT '0',
  `deleted_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `blog_comments`
--

INSERT INTO `blog_comments` (`id`, `user_id`, `blog_id`, `comment_id`, `comment`, `likes`, `deleted_at`, `created_at`, `updated_at`) VALUES
(1, 1, 2, 0, 'Interesting post. Very well structured and good points throughout! One question though, Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat velit?', 0, NULL, '2018-02-24 20:31:45', '2018-02-24 20:31:45'),
(2, 2, 2, 1, 'Thank you, very interesting question. Unique point of view. Semper viverra nam libero justo. Sit amet commodo nulla facilisi. Blandit massa enim nec dui nunc. Eget velit aliquet sagittis id consectetur purus ut faucibus.', 0, NULL, '2018-02-25 02:26:32', '2018-02-25 02:26:32'),
(3, 1, 2, 1, 'Indeed! I can now finally lorem ipsum by myself all the way commodo nulla facilisi!', 0, NULL, '2018-02-25 04:36:18', '2018-02-25 04:36:18'),
(4, 2, 2, 0, 'Weird, I thought I had more information posted. Must have being moderated out of existence then.', 0, NULL, '2018-02-25 09:18:58', '2018-02-25 09:18:58'),
(5, 1, 2, 4, 'Sorry about that, you had quite a few needless stuff in there. Had to tweak your post a bit. Otherwise, everything is lorem ipsum!', 0, NULL, '2018-02-25 12:53:18', '2018-02-25 12:53:18'),
(6, 2, 2, 3, 'Glad that it works for you!', 0, NULL, '2018-02-26 05:35:46', '2018-02-26 05:35:46'),
(7, 1, 2, 6, 'Thank you, feels good!', 0, NULL, '2018-02-25 07:08:33', '2018-02-25 07:08:33');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `blog_comments`
--
ALTER TABLE `blog_comments`
  ADD PRIMARY KEY (`id`),
  ADD KEY `blog_comments_user_id_index` (`user_id`),
  ADD KEY `blog_comments_blog_id_index` (`blog_id`);

Array ( [comment_id] => Array ( [0] => Array ( [id] => 1 [user_id] => 1 [blog_id] => 2 [comment_id] => 0 [comment] => Interesting post. Very well structured and good points throughout! One question though, Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat velit? [likes] => 0 [deleted_at] => [created_at] => 2018-02-24 14:31:45 [updated_at] => 2018-02-24 14:31:45 ) [1] => Array ( [id] => 4 [user_id] => 2 [blog_id] => 2 [comment_id] => 0 [comment] => Weird, I thought I had more information posted. Must have being moderated out of existence then. [likes] => 0 [deleted_at] => [created_at] => 2018-02-25 03:18:58 [updated_at] => 2018-02-25 03:18:58 ) ) ) comment_id相同......我最初将其命名为parent_id,现在我不想改变它。

comment_id为0的任何评论都是父评论,任何评论都带有任何数字的comment_if,他们是该评论的孩子。

可能会造成一些混乱。对不起。

我只想知道生成这种数组的最有效方法是什么。我已经完成了3到4种方法,现在我想知道我是否错过了什么。

0 个答案:

没有答案