मैं उन मोटो की उपलब्धता को पुनः प्राप्त करने का एक तरीका ढूंढ रहा हूं जो संशोधन या प्रशिक्षण में नहीं हैं।

मेरे पास motorbike नाम का एक फॉर्म है जिसमें 3 फ़ील्ड (matriculation, number_motorbike, status) हैं।

यहाँ, मेरे पास 3 मोटरबाइक हैं और 1 अनुपलब्ध number motorbike -> 000001 हैं।

enter image description here

मेरा दूसरा रूप revision है जिसमें 4 फ़ील्ड (date_revision_start, date_revision_end, garage, fk_motorbike) हैं।

मेरे पास रिवीजन में केवल 1 मोटरबाइक है।

enter image description here

मेरे फॉर्म में trainings मेरे पास 2 फील्ड हैं (date_sitting, fk_motorbike)

enter image description here

यहां, जब मैं उदाहरण के लिए 1 मोटरबाइक जोड़ता हूं जो संशोधन में है, तो कोई अवरोध नहीं है, यह मेरी समस्या है।

फ़ॉर्म create.blade.php में, क्या यह संभव है, उदाहरण के लिए प्रतिदिन केवल मोटरबाइक उपलब्ध देखना?

enter image description here

मैं वास्तव में इस समस्या पर अटका हुआ हूं... मैं आपकी मदद और आपके समय के लिए अग्रिम धन्यवाद देता हूं।

संपादित करें: 13/07/2019

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Motorbike;
use App\Training;
use App\Revision;

class TrainingController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $trainings = Training::oldest()->paginate(5);
        $motorbikes = Motorbike::doesntHave('revisions')->doesntHave('trainings')->pluck('number_motorbike', 'id');
        return view('admin.trainings.index', compact('trainings'))
             ->with('i', (request()->input('page',1) -1)*5);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {   

        $motorbikes = Motorbike::all();
        $motorbikes = Motorbike::doesntHave('revisions')->doesntHave('trainings')->pluck('number_motorbike', 'id');
        return view('admin.trainings.create', compact('motorbikes', 'trainings'));

    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {   

        $request->validate([
                'date_sitting' => 'required',
                'fk_motorbike' => 'required'
        ]);

        Training::create($request->all());

        return redirect()->route('trainings.index')
                ->with('success', 'new data created successfully');
    }

create.blade.php

<div class="form-group {{ $errors->has('fk_motorbike') ? 'has-error' : '' }}">
            <label for="company-content">Number motorbike </label>
            <select name="fk_motorbike" id="fk_motorbike" class="form-control" required="required" value="{{ old('fk_motorbike')}}"/>
              <option value="">Choice motorbike</option>
                @foreach($motorbikes as $motorbike)
                <option value="{{$motorbike->id}}" {{ old('fk_motorbike') == $motorbike->id ?  'selected' : '' }} >
                {{$motorbike->number_motorbike}} 
              </option>
                @endforeach
                {!! $errors->first('fk_motorbike', '<span class="help-block">:message</span>') !!}
            </select>
          </div>

enter image description here

0
user11124425 12 जुलाई 2019, 23:10

2 जवाब

सबसे बढ़िया उत्तर

ऐसा करने का सबसे आसान तरीका उन मोटरबाइकों से पूछताछ करना है जो संशोधन के अधीन नहीं हैं और पहले से प्रशिक्षण में नहीं हैं, ड्रॉपडाउन सूची के लिए id और name तैयार करें। कुछ इस तरह:

$motorbikes = Motorbike::doesntHave('revision')->doesntHave('training')->pluck("name", "id");

यदि आपको केवल ऐसे प्रशिक्षण की आवश्यकता है जो समय पर विरोध करता हो, तो आप doesntHave को whereDoesntHave() से बदल सकते हैं और तिथियों पर फ़िल्टर करने के लिए एक क्लोजर बना सकते हैं।

उपरोक्त मान लिया गया है कि आपके मोटरबाइक मॉडल पर संबंध हैं, जो संशोधन और प्रशिक्षण को संभालने के लिए सही ढंग से स्थापित किया गया है। आपको केवल उन मोटरबाइकों के लिए ड्रॉपडाउन की आवश्यकता है जिनके पास प्रशिक्षण नहीं है और जिनके पास संशोधन नहीं है।

// Get all motorbike ids with trainings:
$motorbikeIdsInTraining = Training::pluck('fk_motorbike')->toArray();
// Get all motorbike ids with revisions:
$motorbikeIdsInRevision = Revision::pluck('fk_motorbike')->toArray();
// Get all motorbikes
$motorbikesAll = Motorbike::all();
// Loop on all bikes to see if they are in revision or training:
$goodBikeIdsForDropdown = [];
foreach($motorbikesAll as $bike){ 
     if(!in_array($bike->id, $motorbikeIdsInTraining) && ! in_array($bike->id, $motorbikeIdsInRevision){
         $goodBikeIdsForDropdown[$bike->id] = $bike->number_motorbike
     }
 }

यह निचला हिस्सा बिल्कुल भी सबसे कुशल नहीं है - इसका मतलब ऐसा करने का तरीका समझाने के लिए है यदि आपने अपने संबंधों को सही तरीके से स्थापित नहीं किया है। लारवेल की वास्तविक शक्ति का लाभ उठाने के लिए उन्हें स्थापित करने की अत्यधिक अनुशंसा करते हैं, लेकिन यह आपके वर्तमान बिंदु पर आपके कोड का परीक्षण करने के तरीके के रूप में काम करना चाहिए।

1
Watercayman 13 जुलाई 2019, 00:38

संपादित करें: आपकी टेबल स्कीमा (जैसे विदेशी कुंजी) के कारण यह अभी तक कार्यात्मक नहीं है, लेकिन दायरा available आपकी आवश्यकताओं को पूरा करता है।

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Revision extends Model
{
    public function motorbike()
    {
        return $this->belongsTo('App\Motorbike');
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Training extends Model
{
    public function motorbike()
    {
        return $this->belongsTo('App\Motorbike');
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Motorbike extends Model
{
    public function revisions()
    {
        return $this->hasMany('App\Revision');
    }

    public function trainings()
    {
        return $this->hasMany('App\Training');
    }

    public function scopeAvailable($query, $date = null)
    {
        $date = $date ?: date('Y-m-d');
        return $query
            ->whereDoesntHave('revisions', function ($query) use ($date) {
                $query
                    ->whereDate('date_revision_start', '<=', $date)
                    ->whereDate('date_revision_end', '>=', $date);
            })
            ->whereDoesntHave('trainings', function ($query) use ($date) {
                $query->whereDate('date_sitting', $date);
            });
    }
}
$date = '2019-07-12';
$availableMotorbikes = App\Motorbike::available($date)->get();
1
Shizzen83 13 जुलाई 2019, 00:51