代码之家  ›  专栏  ›  技术社区  ›  Enes Yurtlu

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

  •  0
  • Enes Yurtlu  · 技术社区  · 8 年前

    我有一个无法解决的问题。我有一个新闻表,包括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 回复  |  直到 8 年前
        1
  •  1
  •   Chris Phillips    8 年前

    您将标题和文本提取到他们自己的表中有什么原因吗?

    你的解决方案类似于你在这篇文章中看到的:

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

    针对您的示例进行了调整:

    假设您将关系更改为“titleTable”,只是为了避免冲突

    class News extends Eloquent {
    
        protected $appends = array('title');
    
        public function getTitleAttribute()
        {
            return $this->titleTable->TitleText;  
        }
    }
    
        2
  •  0
  •   Abid Raza    8 年前

    尝试快速加载。

    如果已经在新闻、标题、文本和图像表之间创建了关系,则可以通过以下方式加载关系模型: eager loading .

    $news = News::with('title','text','image)->find(1);
    
        3
  •  0
  •   Rick James diyism    8 年前

    听起来ORM“过度正常化”。没有合理的理由 消息 将标题、文本和图像等属性放在单独的表中 JOINed 通过“id”。

    News 表。这会导致不必要的效率低下。