【问题标题】:HasMany Eloquent relation in laravel 5.4laravel 5.4 中的 HasMany Eloquent 关系
【发布时间】:2017-05-01 07:18:43
【问题描述】:

我尝试获取登录用户帖子的数量count,以便向登录用户显示,例如他们到目前为止发布了多少帖子或评论:

到目前为止,我所拥有的是 posts 表中的 author_id 列,它将引用用户 ID

这是我的Post 模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{


    public function author() {

        return $this->belongsTo('App\User');
    }

}

这是我的User 模型:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    protected $table = 'users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'role_id',
        'email',
        'password',
        'name',
        'avatar',
        'remember_token',
        'created_at',
        'updated_at'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];


    public function posts()
    {
        return $this->hasMany('Post', 'author_id');
    }


}

这是我的PostController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;
use App\Auth;
use App\User;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $posts = Post::orderBy('created_at', 'desc')->paginate(15);
        $countTodayOrders = Post::whereRaw('Date(created_at) = CURDATE()')->count();

        return view('theme.index',  compact('posts', 'countTodayOrders'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function single($slug) {
        $post = Post::where('slug', '=', $slug)->first();
        $countTodayOrders = Post::whereRaw('Date(created_at) = CURDATE()')->count();
        return view('theme.single', compact('post', 'countTodayOrders'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }
}

有人知道我的错误是什么以及如何解决吗?

【问题讨论】:

  • 顺便说一句,$countTodayOrder 得到了什么?
  • 当天发表的帖子。

标签: php laravel eloquent relation


【解决方案1】:

我想通了:)

我忽略了所有模型角色并直接使用控制器从数据库中插入数据并将其与用户 ID 进行比较,如果它是真的(相同)将返回数字。

如果你需要,这里是你的代码PostController:

public function index()
    {
        $posts = Post::orderBy('created_at', 'desc')->paginate(15);
        $countTodayOrders = Post::whereRaw('Date(created_at) = CURDATE()')->count();
        $postscount = DB::table('posts')
            ->whereExists(function ($query) {
                $query->select(DB::raw(1))
                      ->from('users')
                      ->whereRaw('author_id = id');
            })
            ->get();

        return view('theme.index',  compact('posts', 'countTodayOrders', 'postscount'));
    }

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 2017-08-22
    • 1970-01-01
    • 2015-12-22
    • 2014-10-29
    • 2013-11-14
    • 2020-03-12
    • 2017-10-17
    • 1970-01-01
    相关资源
    最近更新 更多