Вы можете использовать этот код
public function index()
{
$products = Product::with('category')->get();
return view('product' ,compact('products'));
}
В блейде
@foreach($products as $product)
{{$product->name}}
{{$product->category->name ?? ''}}
//or
@if ($product->category)
$product->category->name
@endif
@endforeach
Также, если в таблице проекта внешний ключ не равен category_id
. В вашем случае
public function category()
{
return $this->belongsTo('App\Category', 'category');
}
Установите Начальный каталог = master
в строке подключения и выполните:
select count(*) from sysdatabases where name = @name
с @name
, установленным в имя базы данных.
Если вы хотите проверить строку подключения в целом (а не наличие независимой базы данных), попробуйте подключиться к ней в блоке try / catch
.
Вы можете просто попробовать подключиться к нему. Если это вызывает исключение, значит, строка подключения каким-то образом неверна: либо база данных не существует, либо пароль неверен, либо что-то еще.
DbConnection db = new SqlConnection(connection_string);
try
{
db.Open();
}
catch ( SqlException e )
{
// Cannot connect to database
}
попробуйте
IF NOT EXISTS(SELECT * FROM sys.databases WHERE [name] = @name)
CREATE DATABASE @name;
GO
или
IF db_id(@name) IS NOT NULL
CREATE DATABASE @name;
GO
или SqlConnection.ChangeDatabase (String) . Я думаю, что при новой попытке подключения можно было бы использовать меньше ресурсов sql-сервера.
Чтобы охватить диапазон возможностей (сервер не существует, база данных не существует, нет входа в систему, нет разрешений, сервер не работает и т. д.) - самая простая идея - просто попытаться подключиться как обычно и выполнить что-то тривиальное - SELECT GETDATE ( )
например. Если вы получаете исключение, значит проблема!
Бывают случаи (особенно при работе с внепроцессными системами), когда try / catch
является наиболее прагматичным вариантом.
Просто попробуйте DBConnection.Open (), заключенную в блок try, улавливающий DBException.
Примерно столь же элегантное решение, какое вы собираетесь найти.