Laravel 5.2:如何从一对一的雄辩(hasOne)关系中检索数据

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/36637037/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 13:37:03  来源:igfitidea点击:

Laravel 5.2 : How to retrieve data from one to one eloquent (hasOne) Relationship

phplaraveleloquentlaravel-5.2one-to-one

提问by User57

I have two Models: 1. Course. 2. Fee.

我有两个模型: 1. 课程。2. 费用。

One course has only one fee. While giving input it's completely ok but when I tried to access the fee data, it's showing nothing in fee's column . How do I solve it?

一门课程只有一项费用。虽然提供输入完全没问题,但是当我尝试访问费用数据时,它在费用列中没有显示任何内容。我该如何解决?

Course Model:

课程模式:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Course extends Model
{
    protected $table='courses';
    protected $fillable = ['name'];


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

}

Fee Model:

收费模式:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Fee extends Model
{
        protected $table='fees';
    protected $fillable = ['fee','course_id'];
    public function course()
    {
        return $this->hasOne('App\Course');
    }
}

Controller:

控制器:

public function listofCourse(){
        $course=\App\Course::all();
        return view('listofCourse',compact('course'));
    }

View Page:

查看页面:

<html>
    <head> 
        <title> Course Details </title>

    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
    <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 

    </head>
    <body>


<div class="container">
<h3> Student Details </h3>
      <table  class="table table-striped table-bordered"  id="example">
        <thead>
          <tr>
            <td>Serial No</td>
            <td>Course Name</td>
            <td>Course Fee</td>


        </tr>
        </thead>
        <tbody>
          <?php $i=1; ?>
        @foreach($course as $row)

          <tr>
            <td>{{$i}}</td>
            <td>{{$row->name }}</td>

            <td>    @if($row->course)
                  {{$row->course->fee}}
                   @endif</td>


             </tr>
          <?php $i++; ?>

        @endforeach
        </tbody>


      </table>

    </div>

    </body>
</html>

回答by Qazi

It seems that you have written the relationship wrongly... just do this.

看来你把关系写错了……就这样吧。

Keep in Mind, Course Has The Feemeans Courseis must, so relation should start from Courseside towards Fee.

记住,Course Has The Fee手段Course是必须的,所以关系应该从Course侧面开始Fee

Your Course Model

你的课程模式

class Course extends Model
{
    protected $table='courses';
    protected $fillable = ['name'];


    public function fee(){
        return $this->hasOne('App\Fee','course_id', 'id');
    }

}

Your Fee Model

您的收费模式

class Fee extends Model
{
    protected $table='fees';
    protected $fillable = ['fee','course_id'];
    public function course()
    {
        return $this->belongsTO('App\Course', 'course_id', 'id');
    }
}

Now you can get the relationship by doing this.

现在你可以通过这样做来获得关系。

public function listofCourse(){
        $course=\App\Course::with('fee')->get();
        // doing this for dumping purpose
        echo "<pre>"; 
        print_r($course->toArray()); // you will see the `fee` array
        echo "</pre>"; 
        die();
        return view('listofCourse',compact('course'));
}