(Laravel)从表中获取数据,该表与另一个与该表链接的表相对应

时间:2017-02-16 08:30:36

标签: php mysql database laravel

我正在玩我的第一个Laravel项目,上面的问题可能有点令人困惑,但让我解释一下: -

我有3张桌子(实际上我有更多,但让我们忽略它),我有standardsstddetails& sections如图所示: -

Databases

所以外键对应如下: -

    来自表格stdPK =列standards
  • stdFK stddetails

  • 来自表格ssctionPK =列sections
  • ssctionFK来自 表stddetails

情况如下: -

假设我$idstdPK standards匹配。 使用$id ,我需要获取表格sections 中的所有数据。问题是,我无法找到正确的查询,因为standardssections表仅与stddetails表相关联。

目前我在web.php的查询是: -

Route::get('getstddtl/{id?}', function ($id) {

     $stdsec = Section::
            leftJoin('stddetails', 'ssctionFK', '=', 'ssctionPK')
            ->join('standards', function($join) use ($id){
                $join->on('stdPK', '=', 'stdFK')
                        ->where('stdFK', $id);
            });

    return view('standarddtl', [
        'stdsec' => $stdsec

    ]);
});

我认为这应该很容易,男孩......我错了......我希望有人可以帮助我,因为我的大脑思维能力非常有限。

更新1: -

我在每个模型中设置了雄辩的关系,并使用Laravel的Eloquent方法检索数据: -

$stdsec = Stddetail::with('section')->find($id);

所有数据均来自stddetails& sections表,现在的问题是难以在显示页面的ssctionName表格中显示sections列中的数据,因为它会返回错误。

显示页面上的相关代码如下: -

@foreach ($stdsec as $task)
       {{strtoupper($task->ssctionName)}}
@endforeach

显示错误: -

Error on display foreach

我认为雄辩的方法很好,现在显示部分给我带来了麻烦。关于如何解决这个问题的任何想法?

更新2: -

这里是每张桌子的模型: -

standards标准模型: -

namespace App;

use Illuminate\Database\Eloquent\Model;

class Standard extends Model
{

    public $primaryKey = 'stdPK';

    public function stddetail()
    {
        return $this->hasMany(Stddetail::class, 'stdFK', 'stdPK');
    }
}

stddetails Stddetail 模型: -

namespace App;

use Illuminate\Database\Eloquent\Model;

class Stddetail extends Model
{
    public $table = "stddetails";
    public $primaryKey = 'sdtlPK';
    protected $fillable = ['stdFK', 'sdtlPgNo', 'sdtlLnNo', 'sdtlText', 'sdtlShrtnote', 'sdtlSchm', 'svrFK', 'ssctionFK', 'sdtlRefLbl'];

    public function standard()
    {   
        return $this->belongsTo(Standard::class, 'stdFK');
    }

    public function section()
    {   
        return $this->belongsTo(Section::class, 'ssctionFK');
    }

}

sections部分模型: -

namespace App;

use Illuminate\Database\Eloquent\Model;

class Section extends Model
{
    public $primaryKey = 'ssctionPK';
    public function stddetails()
    {
        return $this->hasMany(Stddetail::class, 'ssctionFK', 'ssctionPK');
    }
}

1 个答案:

答案 0 :(得分:2)

看看雄辩的关系:https://laravel.com/docs/5.4/eloquent-relationships

您应该能够在模型(表格)之间设置正确的关系(hasMany,belongsTo等),并使用单个命令获取所有数据(Eloquent将为您创建所需的查询)。

在不相关的说明中,我建议改进您的命名约定。很难理解使用所有首字母缩略词和短名称的事件基本链接