如何通过模型获取相关数据?

时间:2016-09-06 12:38:15

标签: php sql laravel

我想简单地有一个循环,它有一个子循环,所有的图像链接到我的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.

1 个答案:

答案 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;为了更好的可读性和更容易的维护。如果可能,只需重命名列:)。