2017-02-16 95 views
0

我正在玩弄我的第一个Laravel项目,上面的问题可能有点混淆,但让我解释一下: -(Laravel)从表格中获取ID与另一个表格链接的表格中的数据

我有3个表(其实我有更多的,但让我们忽略它),我有standardsstddetails & sections如下所示: -

Databases

所以外键对应低于: -

从表 sections =列 ssctionFKstddetails

    • stdPK从表standards =列stdFK
      stddetails

    和情景是这样的: -

    可以说我有一个$id匹配stdPK从表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 
    
        ]); 
    }); 
    

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

    UPDATE 1: -

    我已经设置在每个模型中的口才关系,并使用Laravel的锋方法中检索数据: -

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

    的所有数据被从两个stddetails & sections检索现在的问题是在显示页面中显示来自列ssctionNamesections表中的数据时遇到问题,因为它返回错误。

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

    @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'); 
        } 
    } 
    

    stddetailsStddetail模型: -

    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'); 
        } 
    } 
    
  • +0

    这不是打算如何使用数据库。但是你可以用pk作为外键进行一些连接。 –

    +0

    看看关系吗?属于/有很多? – senty

    +0

    @ThomasMoors Owh,不知道..其实有很多表互相链接,但在我正在处理的一个页面上,使用这3个表.. – Kaydarin

    回答

    2

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

    你应该能够之间设置适当的关系(的hasMany,属于关联等)的模型(表格)并通过一个命令获取所有数据(Eloquent将为您创建所需的查询)。

    在一个不相干的笔记上,我会建议改进你的命名约定。真的很难理解事件与所有使用的缩写词和短名称的基本链接

    +0

    你是什么意思“雄辩会为你创建所需的查询”?我认为我们需要自己创建查询......我确实在每个表模型中设置了关系...... – Kaydarin

    +0

    使用ORM的整个目的就像Eloquent。你只是'用'流利的语法来编写代码,如果你的关系设置正确,那么只需使用Models就可以获得所有的数据。 – Nerman

    +1

    例如: '$ details = Standards :: with('stddetails') - > find($ id);' 将返回具有集合类型属性_stddetails_的标准模型。 你不必编写SQL查询,Eloquent为你做了。它的目的是从你的层抽象,所以你可以写代码 (对不起约两个评论,我打太快,所以我不会让我编辑第一个评论) – Nerman

    相关问题