我想简单地有一个循环,它有一个子循环,所有的图像链接到我的project. project.id = images.model_key
。
所以我试图做一些不起作用的事情。
function index()
{
$projects = Project::all();
foreach($projects as $project)
{
echo "<pre>";
print_r($project->images);
echo "</pre>";
}
}
我是项目模型。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\ProjectCategoryProject;
use App\Models\Image;
class Project extends Model
{
public $fillable = ['id', 'title','description', 'home_page', 'display'];
public function categories()
{
return $this->hasMany('App\ProjectCategoryProject');
}
public function images()
{
return $this->hasMany('App\Models\Image');
}
...
所以我想我必须在模型中指定project.id = images.model_key
但是如何?
错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'images.project_id' in 'where clause' (SQL: select * from `images` where `images`.`project_id` = 4 and `images`.`project_id` is not null)
Thanks, sorry i'm guetting confused.
答案 0 :(得分:0)
默认情况下,Laravel会尝试从当前模型中猜测列名称,因此在模型项目中,它会假定其他模型中的列ID为project_id。但是,您可以覆盖它并明确指定要用于关系的列:
public function images()
{
// specify a foreign key to use
return $this->hasMany('App\Models\Image', 'model_key');
}
或者如果你想要完全明确的话。
public function images()
{
// specify a foreign key to use
return $this->hasMany('App\Models\Image', 'model_key', 'id');
}
但我强烈建议你遵守laravel&#34;惯例&#34;为了更好的可读性和更容易的维护。如果可能,只需重命名列:)。