rakko-engineer
@rakko-engineer (tk_hirom)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

CakePHPのhasOneとbelongsToが対応するっていうのがよくわからない

has → 外部キーを持っていないテーブルファイルに定義
belongs → 外部キーを持っているテーブルファイルに定義
ここまではわかるんですよ。

ただ、検索していてよくみる
「hasOneの反対はbelongsToだ!」っていう理屈がわからないんですよ

だって、一対一と一対多ですよ?
ドキュメントにもそう書いてあるのに、なぜこれら二つが対応するのか知りたいです。

なんとも馬鹿らしい質問なのですが、改めて考えてみたらよくわからなくなりました。何卒お知恵をお借りしたいです。どなたか、どなたか。。。

0

2Answer

CakePHPは詳しくないのですが、Laravelだと1:1や1:Nに関わらず従属テーブル側はbelongsToですね。
Laravelのリレーション(hasOne、hasMany、belongsTo)

hasOneの反対はbelongsToだ!

どういう流れでこうおっしゃてるのかわかりませんが、
Laravelなど他の事例と混同されているのか、
あるいはCakePHPもそのように扱えるのではないかと思います。

1Like

Comments

  1. @rakko-engineer

    Questioner

    はい、それはCakePHPも同じです。

    ただ1:1の従属テーブル側がどうしてbelongsToなのかなぁと気になった、というものでした。

    雑な質問の仕方だったにもかかわらず、アドバイス頂きましてありがとうございます!!!

1:1の関連と言ってもどちらも対等な状態であるわけではなく、相手のキーを明示的に持っているかどうかの違いがあります。要は親子関係で、相手のキーを明示的に持っている方が子となります。
データ構造上、子の親は必ず一つですが、親の子は一つとは限りません。なので親は子をどれだけ持っているかを明示する必要があり、hasOneとhasMenyでそれを行います。子はどの親に属しているかを明示するためにbelongsToを使うというわけです。

1Like

Comments

  1. @rakko-engineer

    Questioner

    なるほど!ありがとうございます!!
    belongsToについてドキュメントでは、多対1と説明されていますが、子はどの親に属しているかを明示するための物と認識した方がいいのですね

Your answer might help someone💌