如何在laravel中使用简单的关系

时间:2016-07-22 17:55:24

标签: php laravel

我有两张如下表:

users表:

id - fname - lname

users_projects表:

id - user_id - title

我的模型位于名为Models的目录中:

Users型号:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Users extends Model
{
    //

    public function usersProjects()
    {
        return $this->belongsTo(UsersProjects::class);
    }
}

UsersProjects型号:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class UsersProjects extends Model
{
    protected $table = 'users_projects';
    //

    public function users()
    {
        return $this->hasOne(Users::class);
    }
}

现在,我想展示最后的项目:

    $projects    = UsersProjects::limit(10)->offset(0)->get();

    var_dump($projects);
    return;

但我的var_dump显示了最后的项目!我希望fnamelname!我哪里错了?

2 个答案:

答案 0 :(得分:1)

我认为你的关系可能有点错误。如果用户可以在您的用户模型中拥有多个项目...

public function usersProjects()
{
    return $this->hasMany(UsersProjects::class);
}

您可能也希望使用更简单的命名...

public function Projects()
{
    return $this->hasMany(UserProject::class);
}

(或者只是项目,如果你没有任何其他"项目"模型)

你的"项目"上课......

public function User()
{
    return $this->belongsTo(User::class);
}

(假设您将模型重命名为User而不是" Users"。您的表名应该是"用户"但模型本质上是一个单一的对象。所以它'适合称之为"用户" - 您的UsersProjects模型应该只是UserProject或只是Project)

现在,如果你将方法称为" User"你将不得不添加外键名称......

public function SomeOtherName()
{
    return $this->belongsTo(User::class, 'user_id');
}

然后......

$projects = Project::with('User')->limit(10)->offset(0)->get();

将返回用户急切加载的项目集合。 (假设您已将UsersProjects模型重命名为" Project")

@foreach($projects as $project)
    ...
    First Name: {{ $project->User->fname }}
    ...
@endforeach

答案 1 :(得分:0)

你能指定表之间的关系吗? (一对一,一对多)乍一看,我认为这种关系是错误的