雄辩的ORM模型两个或更多表

时间:2017-10-31 16:11:27

标签: database laravel orm eloquent mariadb

我有一个问题,我无法解决它。我有一个新闻表包括TitleID,TextID,ImageID。还有三个表标题,文本,图像。我希望在一个模型中得到所有这些。但是当我尝试时,得到像数组中的数组一样的结果。但我想要它:

[ News: [ { ID, Title, Text, Image } ] ]

雄辩的ORM响应如下:

[ News: [ { ID, Title: [ID, Title], Text: [ID, Text], Image: [ID, Image] } ] ]

数据库结构

新闻=>



+-----------------+-------------+------+-----+---------+----------------+
| Field           | Type        | Null | Key | Default | Extra          |
+-----------------+-------------+------+-----+---------+----------------+
| ID              | int(11)     | NO   | PRI | NULL    | auto_increment |
| TitleID         | int(11)     | NO   |     | NULL    |                |
| TextID          | int(11)     | NO   |     | NULL    |                |
| ImageID         | int(11)     | NO   |     | NULL    |                |
| CatID           | int(11)     | NO   |     | NULL    |                |
| OlusturmaZamani | datetime    | NO   |     | NULL    |                |
| YayinZamani     | datetime    | NO   |     | NULL    |                |
| DuzenlemeZamani | datetime    | YES  |     | NULL    |                |
| Onay            | tinyint(11) | NO   |     | NULL    |                |
| Hit             | int(11)     | YES  |     | NULL    |                |
+-----------------+-------------+------+-----+---------+----------------+




标题=>



+------------+---------+------+-----+---------+----------------+
| Field      | Type    | Null | Key | Default | Extra          |
+------------+---------+------+-----+---------+----------------+
| ID         | int(11) | NO   | PRI | NULL    | auto_increment |
| TitleText  | text    | NO   |     | NULL    |                |
+------------+---------+------+-----+---------+----------------+




其他表格如标题表。

3 个答案:

答案 0 :(得分:1)

您是否有理由将标题和文字提取到自己的表格中?

你的解决方案就像你在这篇文章中看到的那样:

Add a custom attribute to a Laravel / Eloquent model on load?

调整你的例子:

假设您将relationShip更改为“titleTable”,只是为了避免碰撞

class News extends Eloquent {

    protected $appends = array('title');

    public function getTitleAttribute()
    {
        return $this->titleTable->TitleText;  
    }
}

答案 1 :(得分:0)

尝试急切加载。

如果您在新闻,标题,文字和图像表格之间建立了关系,则可以按eager loading加载关系模型。

$news = News::with('title','text','image)->find(1);

答案 2 :(得分:0)

听起来像是ORM"过度标准化"。没有合理的理由将新闻属性(如标题,文本和图像)放在单独的表JOINed中,并由#34; id"。

"渴望加载"听起来像一个kludge,让它感觉就像列在News表中时不是。这会导致不必要的低效率。