Creating relationships between users/items/products

This commit is contained in:
Bruno F. Fontes 2018-09-12 02:31:03 -03:00
parent 0f15e60c95
commit a905d98304
Signed by: brunofontes
GPG Key ID: EE3447CE80048495
8 changed files with 25 additions and 27 deletions

View File

@ -9,19 +9,17 @@ class ItemController extends Controller
{
public function show($id)
{
$item = \DB::table('items')
->join('products', 'items.product_id', '=', 'products.id')
->where([['products.admin_id', \Auth::id()], ['items.id', $id]])
->select('items.*', 'products.admin_id')
->get();
$otherItems = Item::where([['product_id', $item[0]->product_id], ['id', '!=', $id]])->get();
$item = Item::find($id);
if (!$item || $item->product->user_id != \Auth::id()) return back();
$otherItems = Item::where([['product_id', $item->product_id], ['id', '!=', $id]])->get();
return view('item', compact('item', 'otherItems'));
}
public function index()
{
//TODO: Fazer innerjoint com tabela de users por item
$items = Item::where('admin_id', \Auth::id())->get();
$items = Item::where('user_id', \Auth::id())->get();
return view('item.index', compact('items'));
}
@ -40,6 +38,7 @@ class ItemController extends Controller
'product_id' => 'required'
]
);
$id = Item::insertGetId(['name' => request('item'), 'product_id' => request('product_id')]); //Just remember to add the fillable on Model to make this work
\DB::table('item_user')->insert([ 'user_id' => \Auth::id(), 'item_id' => $id]);

View File

@ -10,7 +10,7 @@ class ProductController extends Controller
{
public function index()
{
$products = Product::where('admin_id', \Auth::id())->get();
$products = Product::where('user_id', \Auth::id())->get();
return view('product.index', compact('products'));
}
@ -21,7 +21,7 @@ class ProductController extends Controller
*/
public function store()
{
Product::create(['name' => request('product'), 'admin_id' => \Auth::id()]); //Just remember to add the fillable on Model to make this work
Product::create(['name' => request('product'), 'user_id' => \Auth::id()]); //Just remember to add the fillable on Model to make this work
return redirect('product');
}
@ -41,7 +41,7 @@ class ProductController extends Controller
*/
public function show($id)
{
$product = Product::where('admin_id', \Auth::id())->find($id);
$product = Product::where('user_id', \Auth::id())->find($id);
return view('product.show', compact('product'));
}
}

View File

@ -13,6 +13,11 @@ class Item extends Model
return $this->belongsTo(Product::class);
}
public function users()
{
return $this->belongsToMany(User::class);
}
public function free($product_id, $user_id)
{
return $query->where([

View File

@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $fillable = ['admin_id', 'name'];
protected $fillable = ['user_id', 'name'];
public function items()
{

View File

@ -32,4 +32,9 @@ class User extends Authenticatable
{
return $this->hasMany(Product::class);
}
public function items()
{
return $this->belongsToMany(Item::class);
}
}

View File

@ -16,7 +16,7 @@ class CreateProductsTable extends Migration
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('admin_id');
$table->integer('user_id');
$table->timestamps();
});
}

View File

@ -4,20 +4,9 @@
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<form method="POST" action="/item" class="form-inline">
<div class="form-group">
{{ csrf_field() }}
<div class="col"><label for="product">Add Item: </label></div>
<div class="col-6"><input type="text" class="form-control" name="item" id="item" placeholder="One Hundred Years of Solitude" required></div>
<div class="col"><button type="submit" class="btn btn-primary">Insert</button></div>
</div>
@include ('layouts.errors')
</form>
<div class="card mt-4">
<div class="card-header">
Item: <strong>{{$item[0]->name}}</strong>
Item: <strong>{{$item->name}}</strong>
@include ('item.buttons')
</div>

View File

@ -3,8 +3,8 @@
<!-- EDIT BUTTON -->
@if ($item[0]->admin_id == \Auth::id())
<form action="/item/{{$item[0]->id}}" method="POST">
@if ($item->product->user_id == \Auth::id())
<form action="/item/{{$item->id}}" method="POST">
@method('PATCH')
<button type="button" class="btn-sm btn-secondary mr-1">Edit</button>
</form>
@ -12,7 +12,7 @@
<!-- DELETE BUTTON -->
<form action="/item/{{$item[0]->id}}" method="POST">
<form action="/item/{{$item->id}}" method="POST">
@method('DELETE')
<button type="button" class="btn-sm btn-danger">Delete</button>
</form>