2016-05-09 3 views
0

Попытка выяснить следующее:Laravel отношения между 3 различными таблицами

  1. Как настроить эти таблицы.
  2. Связь между таблицами с использованием красноречивого.

По существу, вы можете создать сообщение, привязанное к задаче. Каждая задача может иметь уникальные детали, которые потребуют ввода пользователей.

таблицы (один из способов сделать это)

Schema::create('uniqueTopic1', function (Blueprint $table) { 
$table->increments('id'); 
$table->unsignedInteger('post_id'); 
$table->foreign('post_id') 
     ->references('id') 
     ->on('posts') 
     ->onDelete('cascade'); 
$table->string('uniqueDetails1'); 
$table->string('uniqueDetails2'); 
$table->string('uniqueDetails3'); 
$table->string('uniqueDetails4'); 
$table->string('uniqueDetails5'); 
$table->string('uniqueDetails6'); 
$table->string('title'); 
$table->string('description'); 
$table->string('mission'); 
$table->int('money'); 
$table->timestamps(); 
}); 

Schema::create('uniqueTopic2', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->unsignedInteger('post_id'); 
    $table->foreign('post_id') 
      ->references('id') 
      ->on('posts') 
      ->onDelete('cascade'); 
    $table->string('uniqueDetails1'); 
    $table->string('uniqueDetails2'); 
    $table->string('uniqueDetails3'); 
    $table->int('level'); 
    $table->timestamps(); 
}); 

Schema::create('posts', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title'); 
    $table->timestamps(); 
}); 

Теперь я хочу, чтобы установить это так, что я могу вырастить это. Поскольку я добавляю больше задач на сайт, я могу динамически развить это. Вот почему я думаю о таблице сообщений, которая ссылается на таблицу задач, которая затем может войти в таблицу подробностей для этой конкретной задачи?

Прежде всего, это правильный способ настроить это?

Во-вторых, что или как я связал бы это вместе, используя красноречие? Многие для многих? сводная таблица. Это для API поэтому его важным, чтобы иметь возможность построить объект JSON ... это не просто получение передается на вид или что-то в этом роде ...

+2

почему вы хотите иметь отдельную таблицу для каждой задачи? –

+0

У меня получилось бы множество NULL, если бы они были в одной таблице ... и по мере того, как число «задач» (которые, вероятно, не лучшее имя в качестве примера) растет, мне бы не хотелось менять стол со всеми задачами в нем. Детали задачи специфичны для «задачи» или того, что вы хотите назвать. Как еще вы планируете создавать таблицы? – Citti

+0

, вы можете достичь того же, используя пару значений ключа, например param_name (varchar 128), param_value (varchar (128)) –

ответ

0

База данных Схема

Schema::create('tasks', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title'); 
    $table->timestamps(); 
}); 

Schema::create('sub_tasks', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title'); 
    $table->string('description'); 
    $table->unsignedInteger('task_id'); 
    $table->foreign('task_id') 
      ->references('id') 
      ->on('tasks') 
      ->onDelete('cascade'); 
    $table->timestamps(); 
}); 

Schema::create('posts', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title'); 
    $table->unsignedInteger('task_id'); 
    $table->foreign('task_id') 
      ->references('id') 
      ->on('tasks') 
      ->onDelete('cascade'); 
    $table->timestamps(); 
}); 

Пример кода

$task1 = Task::create(['title' => 'Market Shopping']); 
$task2 = Task::create(['title' => 'Spring Cleaning']); 

// Subtask for Task1 
$task1->subTasks()->create([ 
    'title'  => 'Buy shampoo', 
    'description' => 'Around 3 bottles will be good' 
]); 

$task1->subTasks()->create([ 
    'title'  => 'Buy donuts', 
    'description' => 'I love the sprinkled ones!' 
]); 

// Subtask for Task2 
$task2->subTasks()->create([ 
    'title'  => 'Recycle old bottles', 
    'description' => 'They are in the garage' 
]); 

$task2->subTasks()->create([ 
    'title'  => 'Wash car', 
    'description' => 'Do not forget the back seat' 
]); 
+0

, поэтому проблема только в том, что подзадачи будут иметь разные входы. Взяв ваш пример, позвольте мне пересмотреть. 1 сек. – Citti

+0

PHP очень опасен при допущении переменных типов, у вас должны возникнуть проблемы: («1» == 1) в PHP –

+0

проверить ответ, который я дал ниже. – Citti

-1

@dov

так, если я расширил свою идею я Wou ld в конечном итоге с этим тогда ... нет? Извините, он все еще не нажимает на меня, как я сделаю эту работу. Извинения. Я бы в конечном итоге с записями, как:

вход DB для подзадачи 1 и к югу от задачи 2

1 | 1 | x | y | z | NULL | NULL | NULL | NULL | NULL | timestamps 
2 | 2 | NULL | NULL | NULL | a | b | c | d | timestamps 

Таблицы:

Schema::create('tasks', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title'); 
    $table->timestamps(); 
}); 

Schema::create('sub_tasks', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->unsignedInteger('task_id'); 
    $table->foreign('task_id') 
      ->references('id') 
      ->on('tasks') 
      ->onDelete('cascade'); 
    $table->string('task1 specific input1'); 
    $table->string('task1 specific input2'); 
    $table->string('task1 specific input3'); 
    $table->string('task2 specific input1'); 
    $table->string('task2 specific input2'); 
    $table->string('task2 specific input3'); 
    $table->string('task2 specific input4'); 
    $table->string('task2 specific input5'); 
    $table->timestamps(); 
}); 

Schema::create('posts', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title'); 
    $table->unsignedInteger('task_id'); 
    $table->foreign('task_id') 
      ->references('id') 
      ->on('tasks') 
      ->onDelete('cascade'); 
    $table->timestamps(); 
}); 
+0

Вы не должны создавать столбцы для ввода. Использовать отношения –

+0

уверен, что я слышал, как вы устанавливаете ключ/значение. но как бы я справился с различиями между входами ... некоторые детали являются логическими. Некоторые - это текст. некоторые из них являются int. так как я могу хранить все эти разные детали в этой таблице подзадач ... – Citti

Смежные вопросы