【问题标题】:Laravel get data from the foreign keyLaravel 从外键获取数据
【发布时间】:2019-03-30 18:31:51
【问题描述】:

我有两张桌子,一张叫Submission,一张叫AssignSubmission

Submission属于AssignSubmission

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

AssignSubmissionhasManySubmission

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

它们与外键链接 在AssignSubmission 中有iduser_idsubmission_id,外键是submission_id。 在提交表中,它有iduser_idfileurl

AssignSubmission submission_id -> 链接到 -> Submission id。 我已将不同的提交分配给 2 个用户。

如何从外键获取数据? 我想在视图中显示 url 或文件

【问题讨论】:

  • 如果“AssignSubmission submit_id -> links to -> Submission id”那么你的关系是倒退的!具有外部 id 的表 belongsTo 另一个表。所以由于AssignSubmissions 表有submission_id,所以AssignSubmissions 属于Submissions

标签: php laravel eloquent foreign-keys


【解决方案1】:

我认为你们的关系可能是倒退的?

提交:

public function assignSubmissions()
{
    return $this->hasMany(AssignSubmission::class);
}

分配提交:

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

【讨论】:

    【解决方案2】:

    如果您使用的是 laravel 关系。那么你可以这样做:(假设你的提交表模型名为Submission

    App\Submission::with('assignsubmission')->get();
    

    【讨论】:

    • 在我的例子中,提交的 id 是 AssignSubmissiom 外键。 $assignsubmissions = Submission::with('assignsubmission')->get();我没听懂。
    • AssignSubmission 只有一个Submission?
    【解决方案3】:

    如果你已经有一个Submission 对象$submission

    $submission->assignSubmission->url 会给你网址。

    它转换为属性名称的 camalCase。

    【讨论】:

    • 如果我在提交中有 2 个 url,我只想要第二个数据,我该如何显示?
    • 我假设您的意思是assignmentSubmission 中的 2 个 url,如果是这样,您可以将 $submission->assignSubmission 视为普通的 assignSubmission,这意味着您可以正常访问第二个 url assignSubmission,像 $assignSubmission->urls[1],你可以对 $submission->assignSubmission 做同样的事情,比如 $submission->assignSubmission->urls[1]。它现在仅取决于您的 AssignSubmission 模型,与与 $submission 的关系无关。
    • 我有疑问,为什么有时使用这种方式获取数据会显示错误“尝试获取非对象的属性'名称'”
    • @JuMa 那是因为“->”之前的对象不是对象,通常是null。例如,$submission->assignSubmission->url 在这种情况下失败可能是由于 $submission$submission->assignSubmission 为空。
    【解决方案4】:

    你写错了关系,应该是这样的 提交:

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

    分配提交:

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

    为了得到结果,我正在考虑 Submission 和 AssignSubmissions 是你的模型,所以你可以获取,

    $submission = App\Submission::find(1)->assignSubmissions; 
    $assignSubmissions = App\AssignSubmissions::find(1)->submission;
    

    查看此链接以获取更多参考https://laravel.com/docs/5.7/eloquent-relationships#one-to-many

    【讨论】:

    • 我重写了关系现在接下来是什么,我如何从外键获取数据并显示 url
    • @DonaldDonald 你现在想做什么查询?
    • 我正在考虑 Submission 和 AssignSubmissions 是你的模型,所以你可以获取像,$submission = App\Submission::find(1)->assignSubmissions; $assignSubmissions = App\AssignSubmissions::find(1)->submission;
    • 所以在AssignSubmission 我有user_idsubmission_id 我想在视图中显示文件的url
    • 哪个文件网址?
    【解决方案5】:

    你应该试试这个:

    提交模型

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

    分配提交模型

    public function submissions()
    {
        return $this->belongsTo('App\Submission','submission_id');
    }
    

    【讨论】:

      猜你喜欢
      • 2022-06-13
      • 2020-04-19
      • 2015-11-09
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 2018-12-08
      • 2016-10-07
      • 1970-01-01
      相关资源
      最近更新 更多