laravel定义两个表之间的关系

cgfeq70w  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(368)

我有下列表格

1. Environment
--------------
env_id
env_name
env_description
repo_id

2. Repository
--------------
repo_id
repo_name
repo_url

现在,多个环境可以与同一个存储库相关联。我对雄辩很陌生,所以不知道这是哪种关系?我有一个api,我想返回回购细节时,我访问一个环境endoint。所以当我使用 Evironment::all() ,我想获取关联的存储库。我该怎么做?
我浏览了文档中给出的示例,但似乎有一个场景没有提到。

voase2hg

voase2hg1#

根据您的描述,这应该是两个表之间的一对多关系。因此,在简单的英语句子中,应该是 Repository 有很多 Environment s和 Environment 模型属于 Repository . 让我们建立这两个模型。
存储库模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Repository extends Model
{
    public function environments()
    {
        return $this->hasMany(Environment::class);
    }
}

环境模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Environment extends Model
{
    public function repo()
    {
        return $this->belongsTo(Repository::class);
    }
}

注意:我的名字是 Environment::repo() 而不是 Environment::repository() .
如果我们打电话 Environment::repository 作为 Environment 对象,它将返回 null 而不是 Repository 对象。这可能是雄辩的命名问题。老实说,到目前为止我还不知道原因。我用的是拉威尔7号。
一旦完成了模型的创建,就可以使用它们来处理数据。因为你需要得到相关的 Repository 对象 Environment 对象,请检查以下代码:

<?php

$environments = Environment::all();

foreach ($environments as $environment) {
    echo $environment->repo->repo_name . '<br>';
}
shstlldc

shstlldc2#

这将是一对多(逆)关系。

//Environment Model
public function repository()
{
    return $this->belongsTo('App\Repository');
}

//Repository Model
public function environments()
{
    return $this->hasMany('App\Environment', 'repo_id');
}

然后可以返回所有环境及其关系,如下所示:

Environment::with('repository')->get();

相关问题