【发布时间】:2017-07-05 05:57:02
【问题描述】:
我正在玩我的第一个 Laravel 项目,我上面的问题可能有点令人困惑,但让我解释一下:-
我有 3 张桌子(实际上我还有更多,但让我们忽略它),我有 standards、stddetails 和 sections,如图所示:-
所以外键对应如下:-
来自表
standards的列stdPK= 来自表的列stdFKstddetails列
ssctionPK来自表sections= 列ssctionFK来自
表stddetails
场景是这样的:-
假设我有一个 $id 与表 standards 中的 stdPK 匹配。 使用 $id,我需要从表 sections 中获取所有数据。问题是,我找不到正确的查询,因为 standards 和 sections 表都只与 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:-
我在每个模型中都设置了 eloquent 关系,并使用 Laravel 的 Eloquent 方法来检索数据:-
$stdsec = Stddetail::with('section')->find($id);
所有数据都是从stddetails 和sections 表中检索的,现在的问题是在显示页面中难以显示来自sections 表中ssctionName 列的数据,因为它返回错误。
展示页面相关代码如下:-
@foreach ($stdsec as $task)
{{strtoupper($task->ssctionName)}}
@endforeach
显示的错误:-
我认为雄辩的方法很好,现在显示部分给我带来了麻烦。关于如何解决这个问题的任何想法?
更新 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');
}
}
Table stddetails as 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');
}
}
Table sections 作为 Section 模型:-
namespace App;
use Illuminate\Database\Eloquent\Model;
class Section extends Model
{
public $primaryKey = 'ssctionPK';
public function stddetails()
{
return $this->hasMany(Stddetail::class, 'ssctionFK', 'ssctionPK');
}
}
【问题讨论】:
-
这不是数据库的预期使用方式。但是您可以使用 pk 作为外键进行一些连接。
-
看看关系?属于/有很多?
-
@ThomasMoors Owh,不知道..实际上有很多表相互链接,但在我目前正在处理的页面上,使用这 3 个表..
-
来自 XAMPP 的@KirkBeard MySQL,对不起...
-
@senty 我没有查看关系,因为不是我创建了数据库。它对查询至关重要吗?
标签: php mysql database laravel