with updateorcreate collection array php laravel laravel-4 eloquent blade

php - collection - updateorcreate laravel



recuperar mĂșltiples registros asociados a mĂșltiples registros laravel 4.2 (1)

Deberías usar las relaciones de Eloquent para resolver este problema. Vea más aquí: http://laravel.com/docs/4.2/eloquent#relationships

La forma en que lo veo actualmente es que tienes tres modelos con los que estás trabajando: Quiz , Question y Answer , ¿no?

De su pregunta, reúno lo siguiente:

  • Un Question tendrá muchas Question
  • Una Answer pertenecerá a una Question

Entonces, basado en estas suposiciones, desarrollaría los modelos como tal ...

Nota:

  • No he usado 4.3 por un tiempo, así que es posible que tengas que alterar parte del código, pero debería estar bien.
  • Los modelos siguientes suponen que está utilizando claves foráneas de la manera que elocuente también lo espera, de lo contrario puede definirlas como el segundo argumento en el método de relación (hasMany, belongsTo)

Quiz.php

<?php class Quiz extends Eloquent { protected $table = ''quiz''; // or whatever your table is public function questions() { return $this->hasMany(''Question''); // this should be the model name } }

Question.php

<?php class Question extends Eloquent { protected $table = ''question''; // or whatever your table is public function quiz() { return $this->belongsTo(''Quiz''); // defining the inverse of the relation } public function answers() { return $this->hasMany(''Answer''); } }

Answer.php

<?php class Answer extends Eloquent { protected $table = ''answer''; // or whatever your table is public function question() { return $this->belongsTo(''Question''); } }

Entonces tu controlador se vuelve mucho más limpio

Controlador

public function playQuiz($id) { $quiz = Quiz::find($id); return View::make(''quizzes'', compact(''quiz'')); }

Ver

<h3>{{ $quiz->name }}</h3> @foreach($quiz->questions as $question) <h4>{{ $question->question }}</h4> @foreach($question->answers as $answer) <p>{{ $answer->answer }}</p> @endforeach @endforeach

Avíseme si tiene problemas para implementar lo anterior y haré todo lo posible para ayudar. Las relaciones pueden ser un poco complicadas al principio, pero una vez que las conozcas, nunca mirarás hacia atrás.

Hace poco hice esta pregunta que obtuvo una respuesta, pero desafortunadamente no resolvió el problema, después de eso no obtuve más respuestas y realmente necesito solucionar este problema que tengo.

De acuerdo, tengo que crear un sitio web de cuestionario para mi escuela en el que un usuario pueda jugar el cuestionario, esta página debe mostrar el nombre del cuestionario, las preguntas asociadas al cuestionario y las respuestas asociadas a las preguntas. Puedo mostrar el nombre del cuestionario sin problema y también puedo mostrar las preguntas, pero por alguna razón solo se muestran las respuestas asociadas a la pregunta final.

Aquí está mi código:

public function playQuiz($id) { // get all the questions associated to the selected quiz $questions = Question::where(''quiz_id'', $id)->get(); // get all the answers associated to the questions foreach($questions as $question) { $answers = Answer::where(''question_id'', $question->id)->get(); } $data = [ ''quiz'' => Quiz::find($id), ''questions'' => $questions, ''answers'' => $answers ]; return View::make("quizzes.playQuiz", $data); }

La variable $ id es la identificación de la prueba que seleccioné, así que debería poder recuperar todos los datos asociados a esta identificación, y todos los datos asociados a los datos asociados de esta identificación.

Aquí está mi html (con blade):

<h3>{{ $quiz->name }}</h3> @foreach($questions as $question) <h4>{{ $question->question }}</h4> @foreach($answers as $answer) @if($answer->question_id == $question->id) <p>{{ $answer->answer }}</p> @endif @endforeach @endforeach

Sé que el problema radica en la forma en que obtengo mis respuestas del DB, pero no sé cómo solucionarlo. ¡La ayuda es muy apreciada! ¡Gracias por leer!

*editar,

mi esquema db es el siguiente:

yo tengo

  • una tabla llamada cuestionarios con una identificación, nombre y descripción.
  • una tabla llamada preguntas con una identificación, pregunta y una clave externa "quiz_id"
  • una tabla llamada respuestas con una identificación, respuesta y una clave foránea "question_id"

una prueba puede tener varias preguntas, pero una pregunta solo puede tener una prueba, una pregunta puede tener varias respuestas, pero una respuesta solo puede tener una pregunta.

Espero que sea suficiente información sobre mi base de datos, ¡gracias por ayudarme!