2012-09-22 12 views
5

सरल परिदृश्यों के साथ रेडबीन में कई से कई मैपिंग का उपयोग करना आसान है। लेकिन आप एक ही वस्तु के बीच कई से अधिक मैपिंग कैसे करते हैं?रेडबीन, एक ही ऑब्जेक्ट का उपयोग कर कई से अधिक कई

उदाहरण:

क्या मैं पूरा करना चाहते हैं बहुत और "अनुयायियों" के चहचहाना/instagram सेटअप करने के लिए इसी तरह की संरचना में है "निम्न"

// this c 

$user = R::dispense('user'); 
$user2 = R::dispense('user'); 

// .. 

//Usr1 follows user2 
$user->sharedUser[] = $user2; 

// user2 follows user1 
$user2->sharedUser[] = $user1; 

अब, मैं करने के लिए, user1 के नजरिए से चाहते हैं , अनुयायियों और निम्नलिखित उपयोगकर्ताओं दोनों को सूचीबद्ध करें।

हालांकि, मैं डेटाबेस में सभी उपयोगकर्ताओं से पूछताछ किए बिना और उपयोगकर्ता 1 की तलाश किए बिना "अनुयायियों" की सूची नहीं दे सकता। क्या रेडबीन में कई "साझा" सूचियों या इन विशेष मामलों के लिए कोई अच्छा कामकाज करने का कोई तरीका है या क्या रास्ता तय करने का तरीका है?

उत्तर

6

यहाँ कोड है कि मैं परीक्षण के साथ उपयोग करने साबित होता है कि यह काम करता है :)

<?php 
include_once 'rb.php'; 
R::setup(); 


//create users 
$users = array(); 
foreach (array('arul', 'jeff', 'mugunth', 'vish') as $name) { 
    $user = R::dispense('user'); 
    $user->name = $name; 
    $user->follows = R::dispense('follows'); 
    //create variables with specified names ($arul, $jeff, etc) 
    $$name = $user; 
    $users[] = $user; 
} 

//set relationships 
$arul->follows->sharedUser = array($jeff); 
$mugunth->follows->sharedUser = array($jeff, $arul); 
$vish->follows->sharedUser = array($arul, $mugunth); 

R::storeAll($users); 

//print relationships 
$id = 1; 
while (true) { 
    echo "-----------------------------------\n"; 
    $u = R::load('user', $id++); 
    if (!$u->id) break; 
    echo "$u->name follows " . count($u->follows->sharedUser) . " user(s) \n"; 
    if ($u->follows) { 
     foreach ($u->follows->sharedUser as $f) { 
      echo " - $f->name \n"; 
     } 
    } 
    echo "\n$u->name is followed by " 
     . R::getCell("SELECT COUNT(*) FROM follows_user WHERE user_id = $u->id") 
     . " user(s) \n"; 
    foreach ($u->sharedFollows as $f) { 
     $follower = array_shift($f->ownUser); 
     echo " - $follower->name \n"; 
    } 
} 

/* echos the following 
----------------------------------- 
jeff follows 0 user(s) 

jeff is followed by 2 user(s) 
    - arul 
    - mugunth 
----------------------------------- 
arul follows 1 user(s) 
    - jeff 

arul is followed by 2 user(s) 
    - mugunth 
    - vish 
----------------------------------- 
mugunth follows 2 user(s) 
    - jeff 
    - arul 

mugunth is followed by 1 user(s) 
    - vish 
----------------------------------- 
vish follows 2 user(s) 
    - arul 
    - mugunth 

vish is followed by 0 user(s) 
----------------------------------- 
*/ 
संबंधित मुद्दे