【问题标题】:How to getting rows from Laravel's belongsToMany relations?如何从 Laravel 的 belongsToMany 关系中获取行?
【发布时间】:2014-11-15 22:07:02
【问题描述】:

我在 Laravel 上的 belongsToMany 关系有问题。首先,我想描述我的表结构。我的数据库上有 3 个不同的表。项目、技能和项目技能是我的表。我的模型有一个结构。当我尝试使用技能插入项目时,它运行良好。但是,当我尝试获取单个项目时,它没有列出技能。

项目控制器:

$Project = Projects::with('skills')->where('Projects.SefTitle','=',$ProjectSef)->first();
return View::make('Projects.view',array('Project'=>$Project));

项目(模型)

...
public function skills(){
    return $this->belongsToMany('Skills','ProjectSkills','ProjectID','SkillID');
}
...

查看:

@foreach($Project->Skills as $Skill)
    {{$Skill->Title}} <br />
@endforeach

数据库和数据集:

【问题讨论】:

  • Projects::with('skills')-&gt;where('Projects.SefTitle','=',$ProjectSef)-&gt;take(1)-&gt;toSql();的返回值是多少?如果你在 phpMyAdmin 中运行它是否按预期工作?
  • toSql()的输出是select * from Projects where Projects.SefTitle = ? limit 1。其实只是在mysql上得到一个项目而已。我的问题是关于Skills的。
  • Puh 现在我的想法不多了...我想您已经在模型上设置了所有主键?喜欢protected $primaryKey = 'ProjectID'
  • 是的,我再次检查了一遍,其中许多都有一个 primaryKey 变量。在模型上。但是,我的 ProjectSkills 表上没有任何主键列。
  • 数据透视表上的主键不应该有所作为。其实我相信你连一个都不需要……你说你可以插入包括技能在内的数据?你使用了这种关系吗?

标签: php mysql laravel laravel-4 eloquent


【解决方案1】:

对于不同于默认 Laravel 使用的主键(即 id),请确保在每个模型类上定义主键:

class Projects extends Eloquent {
    protected $primaryKey = 'ProjectID';
}

【讨论】:

    猜你喜欢
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2015-11-12
    • 2015-02-22
    • 2023-03-12
    相关资源
    最近更新 更多