Форум программистов, компьютерный форум, киберфорум
PHP: Yii, Yii2
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
9 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,119
1

Relation HasMany doesn't work

27.09.2018, 22:46. Показов 1266. Ответов 4
Метки yii2 (Все метки)

нужно отобразить количество задач (name в таблице ) для каждого проекта ( projects в таблице ).Скриншот прикрепляю


То есть один проект может иметь много задач.


Прописал так реляцию Has many в модели Projects - Проект один а тасков для одного проекта может быть много (указал связь для один проект может иметь много айди(то есть задач) )
PHP
1
2
3
4
5
 public function getTasks()
 
          {                                         
        return $this->hasMany(Tasks::className(), ['id' => 'project'])->orderBy(['id' => SORT_DESC])->limit(1);
         }






Контроллер

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public function actionAllprojects(){
 
 
              if (\Yii::$app->user->isGuest) {
                  $this->goHome();
              }
 
              $tasks = Projects::find()->addOrderBy(['timecreation' =>SORT_DESC])->all();
              $timemodel=Time::find()->all();
              $tasksquantity=Projects::find()->addOrderBy(['timecreation' =>SORT_DESC])->count();
 
              return $this->render('allprojects',compact('tasks','timemodel','tasksquantity'));
 
 
          }

Вид




PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public function actionAllprojects(){
 
 
              if (\Yii::$app->user->isGuest) {
                  $this->goHome();
              }
 
              $tasks = Projects::find()->addOrderBy(['timecreation' =>SORT_DESC])->all();
              $timemodel=Time::find()->all();
              $tasksquantity=Projects::find()->addOrderBy(['timecreation' =>SORT_DESC])->count();
 
              return $this->render('allprojects',compact('tasks','timemodel','tasksquantity'));
 
 
          }


Однако все равно не помогло. У меня 3 задачи и 2 Проекта.А оно для всех проектов отобразило 3 задачи.Скриншот прикрепляю
Миниатюры
Relation HasMany doesn't work   Relation HasMany doesn't work  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2018, 22:46
Ответы с готовыми решениями:

Подсчет тасков при реляции HasMany()
Есть таблица Тасков и Проектов связал их реляцией в модели чтоб вывести список Проектов и...

Как вывести результаты связи HasMany
Есть две таблицы Таскс и Таймс. В Таскс сохраняются Задачи.А в Таймс хранятся время начала и...

Как вывести самую последнюю запись при реляции HasMany
в таблице Таскс хранятся Задачи, в таблице Таймс хранятся время их выполнения. Ранее для одной ...

Как вывести самую последнюю запись при реляции HasMany
в таблице Таскс хранятся Задачи, в таблице Таймс хранятся время их выполнения. Ранее для одной ...

4
Особый статус
620 / 218 / 164
Регистрация: 18.11.2015
Сообщений: 1,083
28.09.2018, 19:10 2
Цитата Сообщение от TVPNERO Посмотреть сообщение
Проект один а тасков для одного проекта может быть много (указал связь для один проект может иметь много айди(то есть задач) )
А где сущность Project? Что-то не наблюдается.

Цитата Сообщение от TVPNERO Посмотреть сообщение
Однако все равно не помогло. У меня 3 задачи и 2 Проекта.А оно для всех проектов отобразило 3 задачи.
Если вы у вас только тот функционал (код), который описан выше, то ничего удивительного.

На скриншотах тоже не понятно, где связь с Project?

Добавлено через 21 секунду
ну и Представление тоже скиньте, уже имели дело вроде
0
9 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,119
30.09.2018, 17:05  [ТС] 3
FloppyDisc,

Цитата Сообщение от FloppyDisc Посмотреть сообщение
А где сущность Project? Что-то не наблюдается
Я называл только Projects (то есть в множественном числе) не Project.

если я правильно понимаю под сущностью вы имеете ввиду обьект или класс.(не учился на факультете программирования)
В таком случае думаю так как я создал модель Project которая обращается к таблице Tasks то тогда модель можно считать сущностью.
Так как в контроллере я использую класс модели в запросе.

PHP
1
$tasks = Projects::find()->addOrderBy(['timecreation' =>SORT_DESC])->all();
Цитата Сообщение от FloppyDisc Посмотреть сообщение
ну и Представление тоже скиньте, уже имели дело вроде
Да на начале темы я не то скопировал .

Представление (allprojects.php) вот



PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
 
?>
 
 <h1>Все проекты</h1>
 
 
 
<table class="table_price">
    <caption>Все Проекты</caption>
    <tbody>
    <tr id="headnone" >
        <th class="headnone">Проект</th>
        <th class="headnone" colspan="2">Количество задач</th>
    </tr>
 
 
 
    <?php foreach ($tasks as $task): ?>
 
 
 
    <tr>
 
        <td class="thead"><?php echo $task->project; ?></td>
    <td class="thead"><?php echo  $tasksquantity; ?></td>
 
        <td>
 
 
        </td>
 
       </tr>
 
 
 
<?php endforeach; ?>
 
</tbody>
</table>
0
Особый статус
620 / 218 / 164
Регистрация: 18.11.2015
Сообщений: 1,083
30.09.2018, 17:47 4
Лучший ответ Сообщение было отмечено TVPNERO как решение

Решение

если даже начать с этого:
PHP
1
$tasks = Projects::find()->addOrderBy(['timecreation' =>SORT_DESC])->all();
почему результат выборки Проектов вы называете Таскс ($tasks), это немного сбивает. В общем на сколько я понял, вы не правильно сформировали. То что у вас в таблицах тасков есть !строковое! поле project != реляции, это вообще не связь. Должно быть нечто эдакое:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// in Model Project
public function getTasks()
{
   return $this->hasMany(Task::className(), ['project_id' => 'id']);
}
 
// in Model Task
public function getProject()
{
        return $this->hasOne(Project::className(), ['id' => 'project_id']);
}
 
// in Controller
$projects = Project::find()->all();
 
// in View (getAllProjects)
foreach($projects as $project) {
    echo $project->name, PHP_EOL;
    foreach($project->tasks as $task) {
       echo $task->name, PHP_EOL;
    }
}
Думаю суть понятна
1
9 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,119
07.10.2018, 23:29  [ТС] 5
Цитата Сообщение от FloppyDisc Посмотреть сообщение
foreach($project->tasks as $task) {
* * * *echo $task->name, PHP_EOL;
* * }

только тут мне нужно вывести не названия тасков а их количество для каждого проекта.Как тогда должно быть?

Добавлено через 29 минут
сделал так

PHP
1
2
3
 foreach($project->tasks as $task) {
        echo count($task->name);
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2018, 23:29

Why doesn't work it? Where is the mistake? I don't know
// 1. Вывести сумму элементов масcива через функцию void input (int *x, int n) { ...

Why Java3D 1.3 (and early) doesn't work with j2sdk1.4.1_01 ?
Hello, Java3D demos and other J3D-programs didn't work with either DirectX and OpenGL versions...

Произвольное условие отношения hasMany
Есть две модели Ticket Visit Между ними в модели Ticket нужно создать отношение один к...

Relation n:m
Помогите плиз с примером. Существует в реляцинных базах данных, такое отношение как напиример...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru