2017-04-12 2 views
1

J'essaie de convertir le code que j'ai écrit pour que mon contrôleur fonctionne comme un modèle afin que je puisse tirer l'information dans une lame.Réécrire le code du contrôleur en tant que modèle Laravel 5

Fondamentalement, je prends au hasard à partir d'une Percents table de ma base de données portant la mention « marges » et en le multipliant par le coût de plusieurs éléments. Je dois alors faire quelque chose comme

@foreach($item_cost as $ic) 
Item Name: {{ $ic->name }} Cost: {{ $ic->cost }} 
@endforeach 

où il tire le nom de l'élément de la table « articles » et multiplie ensuite un coût de base de la marge dans le tableau « marges ».

public function drug_margins() 
{ 
    $locations = Locations::inRandomOrder()->get()->first(); 
    $drugs = Drugs::inRandomOrder()->get()->first(); 
    $margins = Margins::inRandomOrder()->get()->first(); 
    $add = $locations->margin*$drugs->base_value*$margins->percent; 
    $cost = $add+$drugs->base_value; 
    return "<h2>Trismegistus Drug Cost Randomizer</h2><br>Drug Name: " . $drugs->name . "<br>" . "Location: " . $locations->name . "<br>" . "Location Margin: " . $locations->margin . "<br>" . "Margin: " . $margins->percent . "<br>" . "Drug Base Value: " . $drugs->base_value . "<br>" . "New Cost: " . $cost . "<br>"; 
} 

Si cela est pas de sens s'il vous plaît laissez-moi savoir si je peux préciser.

TIA!

J'ai essayé d'utiliser les informations de la première réponse, mais il ne fonctionne pas à 100%. Le coût est en train de changer en conséquence, mais le "nom de drogue" reste le même, peu importe quoi.

Voici mon modèle:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Drugs extends Model 
{ 
// 
protected $table = 'drugs'; 
public function user_data() 
{ 
    return $this->belongsTo('user_data', 'TableID', 'id'); 
} 

public function getCostAttribute() 
{ 
    $locations = Locations::inRandomOrder()->get()->first(); 
    $drugs = Drugs::inRandomOrder()->get()->first(); 
    // $drugs = Drugs::find(1)->get()->first(); 
    $margins = Margins::inRandomOrder()->get()->first(); 
    $add = $locations->margin*$drugs->base_value*$margins->percent; 
    $cost = $add+$drugs->base_value; 
    //$cost = array('name' => $drugs->name, 'base_value' => $drugs- >base_value, 'cst' => $cst); // Presents array but can't get it to work as variables in view 
    return $cost; 
    } 
} 

et voici mon contrôleur:

public function drug_margins() 
{ 
    $drugs = Drugs::inRandomOrder()->first(); 
    $drugs = $drugs->cost; 
    dd($drugs); // Testing Phase 
    // return view('test.test', compact('drugs')); 
} 

Quelqu'un peut-il voir ce que je fais mal. Encore une fois les coûts des médicaments changent correctement maintenant, mais le nom du médicament reste le premier médicament qui est l'aspirine.

Merci encore!

Répondre

0

Vous pouvez définir un accessor dans le modèle comme:

public function getCostAttribute() 
{ 
    // write your logic here 
    return $cost; 
} 

Et vous pouvez l'utiliser comme:

{{ $model->cost }} 
+0

Cela semble maintenant frais que je vais pouvoir faire un foreach sur cela pour retirer tous les coûts dans la table? – Trismegistus

+0

Ok ça a fonctionné partiellement mais je ne retire pas toute l'information qui change. Pour une raison quelconque, le nom du médicament ne change pas. – Trismegistus