2017-10-31 1 views
0

私はそれに対処できないという問題があります。私はNewsIDテーブルにTitleID、TextID、ImageIDが含まれています。さらに3つのテーブルタイトル、テキスト、画像。私は1つのモデルでそれらのすべてを取得したい。しかし、私が試してみると、配列のような結果が得られます。しかし、私はそれが好きたい:奇妙なORMモデル2つ以上のテーブル

[ 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 |    | 
 
+------------+---------+------+-----+---------+----------------+

タイトルのテーブルのような他のテーブル。

+0

コードを表示できますか? – Jackowski

+0

古典的なSQLが私に仲間入りする必要があると思われる – devk

+0

あなたのニュースモデルと残りのモデル(タイトル、テキスト、イメージ)との関係を宣言する必要があると思います。次に、ニュースモデルに 'title'、' text'、 'image'属性を追加する必要があります(https://laravel.com/docs/5.5/eloquent-serialization#appending-values-to-json) 。 – Camilo

答えて

0

ORMが「オーバー正規化」しているように聞こえます。 ニュースタイトル、テキスト、イメージなどの属性を別のテーブルJOINedに「id」で入れる理由はありません。

"Eager loading"は、カラムがNewsテーブルにないように感じるために、かっこのように聞こえます。これは、不必要な非効率を招く。

+0

あなたの答えをありがとう。私は今あなたに同意します。それは非効率をもたらすでしょう。 –

+0

ORMはあなたを過大化させません。それは、コードを書いた人が行ったデザイン決定でした。 –

+0

@ChrisPhillips - コメントありがとうございました。決定を特徴付けるキーワードをいくつか挙げることができますか?そうすれば、私は "over-normalize"の代わりに "..."と言うことができます。 (これはこのような唯一の質問ではありません。) –

0

熱心な読み込みを試してください。

ニュース、タイトル、テキスト、およびイメージの表の間にリレーションシップを作成した場合は、リレーションモデルをeager loadingでロードできます。

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

私はすでに試みましたが、それは配列の配列を与えます。私はそれを単一のニュースの対象としたい。 –

0

自分のテーブルにタイトルとテキストを抽出した理由はありますか?

あなたがこの記事では何を参照してくださいようなものになるだろうのためのソリューション:あなたの例のために

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; 
    } 
} 
関連する問題