Модель
public function get_client_info()
{
$client = "SELECT c1.name, c1.email FROM ".$this->_tableWorks." w1
INNER JOIN ".$this->_tableClients." c1 ON w1.client_id = c1.id";
return DB::query(Database::SELECT, $client)
->execute()
->as_array();
}
Вид
<i>Заказчик:
<!-- не пойму почему получается несколько строк из таблицы Клиентов-->
<a href="mailto:<?php echo $c_info[0]['email']; ?>">
<?php echo $c_info[0]['name']; ?> //
</a>
</i>
Контроллер
public function action_works()
{
$id = $this->request->param('id');
$works = array();
if (!empty($id))
{
$content = View::factory("/pages/work");
}
else
{
$content = View::factory("/pages/works")
->bind('works', $works)
->bind('c_info', $client_info);
}
$works = Model::factory('Works')->get_all();
$client_info = Model::factory('Works')->get_client_info();
$this->template->content = $content;
}
представляете что получается в итоге?
должно получиться превью, с именем Заказчика данного проекта, а у меня в итоге выводится столько заказчиков, сколько есть в таблице Клиентов
у меня ошибка по-любому в SQL :) я не пойму как правильно поставить вопрос, извиняюсь, да простят меня модераторы форума)
Спустя 5 часов, 36 минут, 28 секунд (15.06.2012 - 08:11) Placido написал(а):
Подозреваю, что движок Кохана здесь ни при чем. Я так понимаю, для того чтобы выбрать какую-то запись из таблицы, нужно, чтобы в выборке присутствовало соответствующее условие (что-то вроде WHERE w1.client_id = " . $id). А его нет.
======
Хотя могу и ошибаться. Возможно, выбираются все клиенты, но тогда id нужного клиента должно присутствовать в php-коде (что-нибудь вроде $c_info[$id]['name']).
======
Хотя могу и ошибаться. Возможно, выбираются все клиенты, но тогда id нужного клиента должно присутствовать в php-коде (что-нибудь вроде $c_info[$id]['name']).
Спустя 2 минуты, 51 секунда (15.06.2012 - 08:13) T1grOK написал(а):
//где $id - идентификатор заказчика
public function get_client_info($id)
{
$client = "SELECT c1.name, c1.email FROM ".$this->_tableWorks." w1
INNER JOIN ".$this->_tableClients." c1 ON w1.client_id = c1.id
WHERE w1.client_id= '{$id}' ";
return DB::query(Database::SELECT, $client)
->execute()
->as_array();
}
Собственно то что Placido подразумевал.
Спустя 3 часа, 23 минуты, 37 секунд (15.06.2012 - 11:37) CyberOrcX написал(а):
видимо мне здесь не удивиться
Спустя 11 минут, 51 секунда (15.06.2012 - 11:49) CyberOrcX написал(а):
ладно, хрен с ним с этим привязыванием
Спустя 1 час, 33 минуты, 6 секунд (15.06.2012 - 13:22) Семён написал(а):
Наблюдаю полное непонимание функционала Kohan-ы, хотябы потому что вместо current() вижу as_array()
Спустя 27 минут, 21 секунда (15.06.2012 - 13:49) CyberOrcX написал(а):
он мне только одну запись дал, правильно)) это я знаю
короче, объясняю еще раз, может понятней станет
есть две таблицы в БД - клиенты, заказы
в таблице заказов есть дополнительное поле client_id, которое в логическом последствии должно быть использовано для привязывания двух таблиц
в таблице клиентов - id, name, email
логичное условие я думаю, когда client_id в таблице заказов равняется id в таблице клиентов
в итоге у меня получается следующий SQL-запрос
соответственно две модели: модель_клиенты, модель_заказы
в каждой модели по одной функции вытягивания информации из соответственных таблиц БД
это работает всё прекрасно
идея понятна, что нужно использовать current() вместо as_array()
правильно, мне нужно получить только одну запись
в Контроллере Action-метод для страницы Заказов
функция получения информации о клиенте в модели заказов
Вид страницы заказов
либо что-то у меня в выводе неправильно, либо я в модели неправильно получаю данные, либо в контроллере неправильно их обрабатываю))
не пойму)
короче, объясняю еще раз, может понятней станет
есть две таблицы в БД - клиенты, заказы
в таблице заказов есть дополнительное поле client_id, которое в логическом последствии должно быть использовано для привязывания двух таблиц
в таблице клиентов - id, name, email
логичное условие я думаю, когда client_id в таблице заказов равняется id в таблице клиентов
в итоге у меня получается следующий SQL-запрос
SELECT c1.name, c1.email FROM Works w1
INNER JOIN Clients c1 ON w1.client_id = c1.id;
соответственно две модели: модель_клиенты, модель_заказы
в каждой модели по одной функции вытягивания информации из соответственных таблиц БД
это работает всё прекрасно
идея понятна, что нужно использовать current() вместо as_array()
правильно, мне нужно получить только одну запись
в Контроллере Action-метод для страницы Заказов
public function action_works()
{
$id = $this->request->param('id');
$works = array();
$client_info = "";
// если параметр передан в запросе, то показываем отдельный заказ
if (!empty($id))
{
$content = View::factory("/pages/work");
}
// показываем preview заказов
else
{
$content = View::factory("/pages/works")
->bind('works', $works)
->bind('cinfo', $client_info);
}
$works = Model::factory('Works')->get_all();
$client_info = Model::factory('Works')->get_client_info();
$this->template->content = $content;
}
функция получения информации о клиенте в модели заказов
public function get_client_info()
{
$client_info = "SELECT c1.name, c1.email FROM ".$this->_tableWorks." w1
INNER JOIN ".$this->_tableClients." c1 ON c1.id = w1.client_id";
return DB::query(Database::SELECT, $client_info)
->execute()
->current();
}
Вид страницы заказов
<?php foreach($works as $work): ?>
<div style="padding: 10px; margin-bottom: 10px; border-bottom: #333 2px solid; ">
<strong><a href="<?php echo $work['url']; ?>"><?php echo $work['name']; ?></a></strong> / <?php echo $work['type']; ?><br />
<i>Автор: <?php echo $work['author']; ?></i> /
<i>Дата публикации: <?php echo $work['date']; ?></i><br /><br />
<p>
<img src="/public/images/<?php echo $work['picture']; ?>"
width="120" height="150" />
</p>
<i>
Клиент:
<a href="mailto: <?php echo $cinfo['email']; ?>">
<?php
//должно быть
echo $cinfo['name'];
?></a>
</i>
</div>
<?php endforeach; ?>
либо что-то у меня в выводе неправильно, либо я в модели неправильно получаю данные, либо в контроллере неправильно их обрабатываю))
не пойму)
Спустя 20 часов, 16 минут, 33 секунды (16.06.2012 - 10:06) T1grOK написал(а):
Цитата (T1grOK @ 15.06.2012 - 05:13) |
Собственно то что Placido подразумевал. |
Автор, я же уже написал правильный ответ, а вы все развиваете тему неизвестно что и почему.
Из контроллера передали в модель айдишник и все дела.
public function action_works()
{
//Судя по логике - это и есть ИД клиента
$id = $this->request->param('id');
$works = array();
$client_info = "";
// если параметр передан в запросе, то показываем отдельный заказ
if (!empty($id))
{
$content = View::factory("/pages/work");
}
// показываем preview заказов
else
{
$content = View::factory("/pages/works")
->bind('works', $works)
->bind('cinfo', $client_info);
}
$works = Model::factory('Works')->get_all();
$client_info = Model::factory('Works')->get_client_info($id);
$this->template->content = $content;
}
Спустя 6 часов, 28 минут, 43 секунды (16.06.2012 - 16:35) CyberOrcX написал(а):
мне нужен функционал наподобие комменты к статьям, одно условие, коммент только один должен быть
то есть, заказы (статьи), и клиенты (комменты)
у каждого заказа есть свой клиент (коммент к статье)
вот я хочу реализовать это, чтобы в цикле вывода заказов, снизу была надпись кто заказывал - имя клиента, вытянутый из другой таблицы
я конечно могу поступить не очень правильно, в одну таблицу запихнуть это всё, и выводить из этой таблицы, ну я хочу правильно сделать)
то есть, заказы (статьи), и клиенты (комменты)
у каждого заказа есть свой клиент (коммент к статье)
вот я хочу реализовать это, чтобы в цикле вывода заказов, снизу была надпись кто заказывал - имя клиента, вытянутый из другой таблицы
я конечно могу поступить не очень правильно, в одну таблицу запихнуть это всё, и выводить из этой таблицы, ну я хочу правильно сделать)
Спустя 11 минут, 50 секунд (16.06.2012 - 16:46) CyberOrcX написал(а):
ладно, топик исчерпан