0

ここでいくつかの異なる投稿を読みましたが、何が間違っているのかわかりません。

私のDBは次のように設定されています:

homes
- id
- address_id
- price
- etc...

address
- id
- home_id
- address1
- address2
- etc...

次に、私のモデルはこのように凝縮されます。

home.php
<?php
class Home extends DataMapper {
    public var $has_one = array('address');
}

address.php
<?php
class Address extends DataMapper {
    public var $has_one = array('home');
}

次に、コントローラーは以下を使用します。

homes.php
class Homes extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->library('datamapper');
    }

    public function index() {
        $homes = new Homes();
        $homes->include_related('address');
        $homes->get_iterated();

        $this->output->enable_profiler(TRUE);

        _p($homes); // Self made function that wraps a print_r() in two <pre> tags.
}
}

これら 2 行をコメント アウトすると、標準の CI 戻り配列が得られます。

$homes->include_related('address');
$homes->get_iterated();

そうしないと、サーバーエラーが発生します。DataMapper を使用するのはこれが初めてで、すべてが間違っているとほぼ確信していますが、どこから始めればよいかわかりません。

アップデート:

私は自分の問題を理解しました。addressDBテーブルを変更する必要がaddressesあり、address.phpモデルで指定する必要がありましたvar $table = 'addresses';

それはすべてを修正しました。

4

2 に答える 2

1

はい、モデルでテーブル名を指定できます。また、あなたの例は間違っていました:

$homes = new Homes();

する必要があります

$homes = new Home();

通常、モデル内のテーブル名を再定義して、すべてが正常であることを確認します。

于 2012-04-04T08:07:24.353 に答える
0

あなたの関係は間違っています。私はあなたが1対1の関係船を設定していると仮定します。ドキュメントによると:http: //datamapper.wanwizard.eu/pages/relationtypes.html

これは1対1の関係であるため、関係は3つの方法で保存されている可能性があります。

  1. 示されているように、ワーカーテーブル上。
  2. 職場のテーブルで、worker_idとして
  3. 専用のworkers_workplaces結合テーブルで、列id、worker_id、workplace_idを使用します

ただし、ここでは、ホームに* address_id *を追加し、アドレスに*home_id*を追加しました。から選択する必要があります。たとえば、* home_id *をアドレスに保持し、*address_id*をホームから削除します。

于 2012-04-05T09:25:27.707 に答える