2011-07-30 201 views
-1

使用Codeigniter和Datamapper:我有2個表格:標籤客戶端。客戶端可以有很多標籤,標籤可以有很多客戶端。我正在使用單獨的連接表來保存關係。使用Datamapper檢查一個對象是否與另一個對象相關

我有一個頁面用於管理單個標籤,我遍歷每個客戶端,並且要檢查每個標籤是否與此標籤相關。下面

在代碼中的????確定該複選框被選中,它應該是TRUE如果客戶有標籤,FALSE如果不是。

<h2>Manage Tag: <?php echo $tag->name; ?></h2> 

<?php foreach ($clients as $client): ?> 

    <label> 
     <?php echo form_checkbox('client_id[]', $client->id, ????); ?> 
     <?php echo $client->name; ?> 
    </label> 

<?php endforeach; ?> 

我如何檢查是否$client在這個循環與Datamapper相關$tag

回答

2

如何

$client->is_related_to($tag) 

$client->is_related_to('tag', $tag->id) 

http://datamapper.wanwizard.eu/pages/count.html#is_related_to

注意,這將觸發額外的計數()查詢,您可能會獲取$標籤 - >客戶更好,然後檢查你的迴路是否

isset($tag->clients->all[$client->id]) 
+0

根據您的編輯:我無法獲得第二個解決方案的工作,我是否需要啓用'all_array_uses_ids'或其他?我最初的解決方法是通過'$ tag-> client'循環一次,將客戶端id放入數組中,然後使用'in_array($ client-> id,$ related_tag_ids)',它不會產生(或少些)額外的查詢。我將不得不看看生成的查詢,看看發生了什麼。有時效率比優雅更好。 –

+0

遲了一點,但是,您需要'all_array_uses_ids'。我在每個應用程序中都有這種默認設置,所以我忘了提及,對不起... – WanWizard

相關問題