Получение данных в основной php в формате группы cakephp по таблице

Я хочу получить данные в формате cakephp, например, по таблице (модели)

Подобно:

select user.*,category.*,area.* from user left join category on user.cat_id=category.id left join area on user.area_id=area.id array( [0] => Array( [user]=>array( [user_id] => 1 [user_name] => test user ) [category]=>array( [category_id] => 1 [category_name] => test cat ) [area]=>array( [area_id] => 1 [area_name] => area1 ) ) [1] => Array( [user]=>array( [user_id] => 2 [user_name] => test user ) [category]=>array( [category_id] => 2 [category_name] => test cat ) [area]=>array( [area_id] => 2 [area_name] => area2 ) ) ) 

Всякий раз, когда мы запускаем запрос соединения, извлекается вся группа данных по таблице.

Итак, как это сделать?

Структура таблицы и значения для area таблицы:

 CREATE TABLE IF NOT EXISTS `area` ( `id` int(11) NOT NULL, `a_name` varchar(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `area` (`id`, `a_name`) VALUES (1, 'bapunagar'), (2, 'bopal'); 

Структура и значения таблицы для category таблицы

 CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c_name` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; INSERT INTO `category` (`id`, `c_name`) VALUES (1, 'food'); 

Структура таблицы и значения для user таблицы:

 CREATE TABLE IF NOT EXISTS `user` ( `u_id` int(11) NOT NULL AUTO_INCREMENT, `u_name` varchar(20) NOT NULL, `cat_id` int(11) NOT NULL, `area_id` int(11) NOT NULL, PRIMARY KEY (`u_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `user` (`u_id`, `u_name`, `cat_id`, `area_id`) VALUES (1, 'pragnesh', 1, 1), (2, 'tejash', 1, 2); 

Solutions Collecting From Web of "Получение данных в основной php в формате группы cakephp по таблице"

Ниже приведен код для достижения желаемого массива:

 $sql = "select user.*,category.*,area.* from user left join category on user.cat_id=category.id left join area on user.area_id=area.id"; $res = mysql_query ($sql); $finalArray = array(); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $array = array(); for ($i = 0; $i < mysql_num_fields($res); ++$i) { $table = mysql_field_table($res, $i); $field = mysql_field_name($res, $i); $array[$table][$field] = $row[$field]; } $finalArray[] = $array; } print_r($finalArray); Outputs as: Array ( [0] => Array ( [user] => Array ( [u_id] => 1 [u_name] => pragnesh [cat_id] => 1 [area_id] => 1 ) [category] => Array ( [id] => 1 [c_name] => food ) [area] => Array ( [id] => 1 [a_name] => bapunagar ) ) [1] => Array ( [user] => Array ( [u_id] => 1 [u_name] => pragnesh [cat_id] => 1 [area_id] => 1 ) [category] => Array ( [id] => 1 [c_name] => food ) [area] => Array ( [id] => 1 [a_name] => bapunagar ) ) ... ) 

Надеюсь, это поможет вам.

Можете ли вы проверить, разрешает ли это вашу проблему. Я получил результаты, но, пожалуйста, проверьте, подходит ли это вам:

 $query = mysql_query("select * from user") or die(mysql_error()); $i = 0; $result = array(); while($row = mysql_fetch_array($query)){ $result[$i]['user']['user_id'] = $row['u_id']; $result[$i]['user']['user_name'] = $row['u_name']; $cat_query = mysql_query("select * from category where id = {$row['cat_id']}") or die(mysql_error()); $y = 0; while($cat_row = mysql_fetch_array($cat_query)){ $result[$i]['category']['category_id'] = $cat_row['id']; $result[$i]['category']['category_name'] = $cat_row['c_name']; $y++; }// while $area_query = mysql_query("select * from area where id = {$row['area_id']}") or die(mysql_error()); $z = 0; while($area_row = mysql_fetch_array($area_query)){ $result[$i]['area']['area_id'] = $area_row['id']; $result[$i]['area']['area_name'] = $area_row['a_name']; $z++; }// while $i++; }// while // Here I just show results echo "<pre>"; var_dump($result); echo "</pre>"; 

Просто упомянуть. Я использовал старую моду mysql_connect . Вы можете использовать все, что захотите ( PDO , mysqli ), но тогда вы должны брать массивы по-разному, иначе выполняйте запрос …

Попробуй это,

 $this->loadModel('User'); //Load Model $this->User->find('all',array( 'joins' => array( array( 'table' => 'category', 'alias' => 'Categories', 'type' => 'LEFT', //LEFT JOIN 'conditions' => array( 'Categories.id = User.cat_id' ) ), array( 'table' => 'area', 'alias' => 'Areas', 'type' => 'LEFT', //LEFT JOIN 'conditions' => array( 'Areas.id = User.area_id' ) ) ), 'fields' => array('Users.*','Areas.*','Categories.*') //Display all the fields )); 

Надеюсь, это поможет вам. Благодарю.